C++_note

1、类必须先声明后使用,即class 类名{ };必须加分号,其是类声明语句的结束标志。类成员,不加访问权限关键字时,默认所有成员声明为private权限。注意与Java的区

别,Java中则是默认为protected权限。

2、在类中声明的成员函数用来对数据成员进行操作,还必须在程序中实现这些成员函数。格式为void Point::Display(){}。如果成员函数的定义是在类体中给出的,则

默认为内联函数;如果没有在类声明中给出成员函数的定义,仅仅是成员函数的声明,要想定义内联函数,则可以在类体外,实现这些成员函数时,在其类型前面加上inline关键字

3、在声明类时,不能在类体中给数据成员赋值;数据成员的具体值(是用来描述对象的属性的)是在产生对象时,才对它进行初始化,即对象的初始化。只有产生了一个具体的

对象,这些数据值才有意义。

4、初始化是调用类的构造函数;赋初值是有了对象后,对象调用自己的成员函数实现成员变量的赋值操作。

5、运算符的重载有两种形式:定义为类的类友元函数(有几个操作数,就有几个参数);定义为它将要操作的类的成员函数(有n个操作数,就有n-1个参数)。前者称为友元运

算符函数,后者为成员运算符函数。当以类的类友元函数形式出现时,在类体外实现该方法时,不需要加该方法的所属类符号“::“。运算符重载函数一般格式为,"所操作的类

的类型  operator 重载运算符号 (运算符号的操作数类型  变量){ }”不能用友元函数重载的运算符为:= () [ ]   ->

代码示例:

#include<iostream>
using namespace std;
class nclass{
    int a,b;
    public:
        nclass(int x=0,int y=0){
            a=x;
            b=y;
        }
        friend nclass operator-(nclass obj);
        void show();
};
nclass operator-(nclass obj){
    obj.a=-obj.a;
    obj.b=-obj.b;
    return obj;
}
void nclass::show(){
    cout<<"a="<<a<<" "<<"b="<<b<<"\n";
}
main(){
    nclass ob1(10,20),ob2;
    cout<<"没改变前ob1的成员变量值为:"<<"\n";
    ob1.show();
    cout<<"改变后的ob1的成员变量值为:"<<"\n";
    ob2=-ob1;
    ob1.show();//注意ob1的成员变量值没有变
    cout<<"重载运算符后ob2的成员变量值为:"<<"\n";
    ob2.show();
    return 0;
}

结果为:



示例二、


#include<iostream>
using namespace std;
class coord{
    public:
        coord(int i=0,int j=0);
        void print();
        friend coord operator++(coord op);
        private:
            int x,y;
};
coord::coord(int i,int j){
    x=i;
    y=j;
}
void coord::print(){
    cout<<"x: "<<x<<" "<<"y: "<<y<<"\n";
}
coord operator++(coord op){
    ++op.x;
    ++op.y;
    return op;
}
main(){
    coord ob(10,20),oc;
    cout<<"没改变前ob的成员变量值为:"<<"\n";
    ob.print();

    operator++(ob);
    cout<<"operator++(ob)后的ob成员变量值为:"<<"\n";
    ob.print();

    cout<<"++ob后的ob成员变量值为:"<<"\n";
    ++ob;
    ob.print();

    cout<<" oc=++ob后的ob成员变量值为:"<<"\n";
    oc=++ob;
    oc.print();
    return 0;
}

结果为:


总结,此时仍然是值传递机制。所以ob的内容没有变。


示例三、成员函数为重载运算符的形式;





#include<iostream>
using namespace std;
class coord{
    int x,y;
    public :
        coord(int i=0,int j=0);
        void print();
        coord operator++();
};
coord::coord(int i,int j){
    x=i;
    y=j;
}
void coord::print(){
    cout<<"x="<<x<<",y="<<y<<endl;
}
coord coord::operator++(){
    ++x;
    ++y;
    return *this;
}
main(){
    coord ob(10,20);
    cout<<"没改变前ob的成员变量值为:"<<"\n";
    ob.print();
    cout<<"++ob后ob1的成员变量值为:"<<"\n";
    ++ob;
    ob.print();
    cout<<"ob.operator++()后ob1的成员变量值为:"<<"\n";
    ob.operator++();
    ob.print();
    return 0;
}
结果显示为:


总结,此时是引用传递方式。



相关参考链接还有:http://www.th7.cn/Program/cp/201702/1107736.shtml

    https://wenku.baidu.com/view/1fe7215abe23482fb4da4c45.html###


6、sort的使用:

定义排序函数:


方法1:声明外部比较函数


bool Less(const Student& s1, const Student& s2){    return s1.name < s2.name; //从小到大排序}std::sort(sutVector.begin(), stuVector.end(), Less);
注意:比较函数必须写在类外部(全局区域)或声明为静态函数



当comp作为类的成员函数时,默认拥有一个this指针,这样和sort函数所需要使用的排序函数类型不一样。


否则,会出现错误
 


方法2:重载类的比较运算符


bool operator<(const Student& s1, const Student& s2){    return s1.name < s2.name; //从小到大排序}std::sort(sutVector.begin(), stuVector.end());
方法3:声明比较类




struct Less{    bool operator()(const Student& s1, const Student& s2)    {        return s1.name < s2.name; //从小到大排序    }};std::sort(sutVector.begin(), stuVector.end(), Less());



(一)为什么要用c++标准库里的排序函数Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问

题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高!(二)c++标准库里的排序函数的使用方法I)Sort函数包含在头文件为

#include<algorithm>的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可!II)Sort函数有三个参数:(1)第一个是要

排序的数组的起始地址。(2)第二个是结束的地址(最后一位要排序的地址)(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此

时默认的排序方法是从小到大排序。Sort函数使用模板:Sort(start,end,,排序方法)下面就具体使用sort()函数结合对数组里的十个数进行排序做一个说明!例一:sort函数没有

第三个参数,实现的是从小到大#include<iostream>#include<algorithm>using namespace std;int main(){ int a[10]={9,6,3,8,5,2,7,4,1,0}; for(int i=0;i<10;i++) cout<<a[i]

<<endl;sort(a,a+10); for(int i=0;i<10;i++) cout<<a[i]<<endl; return 0;}例二通过上面的例子,会产生疑问:要实现从大到小的排序肿么办? 这就如前文所说需要在sort()函数

里的第三个参数里做文章了,告诉程序我要从大到小排序!需要加入一个比较函数 complare(),此函数的实现过程是这样的bool complare(int a,int b){ return a>b;}这就是告诉程

序要实现从大到小的排序的方法!#include<iostream>#include<algorithm>using namespace std;bool complare(int a,int b){ return a>b;}int main(){ int a[10]=

{9,6,3,8,5,2,7,4,1,0}; for(int i=0;i<10;i++) cout<<a[i]<<endl; sort(a,a+10,complare);//在这里就不需要对complare函数传入参数了,//这是规则 for(int i=0;i<10;i++) cout<<a[i]

<<endl; return 0;}例三:通过上面例一、二的方法虽然实现了从大到小和从大到小的排序,这样做还是有点麻烦,因为还需要自己编写告诉程序进行何种排序的函数,c++标准

库强大的功能完全可以解决这种麻烦。Sortt函数的第三个参数可以用这样的语句告诉程序你所采用的排序原则less<数据类型>()//从小到大排序greater<数据类型>()//从大到小排

序结合本例子,这样的就可以完成你想要的任何一种排序原则了#include<iostream>#include<algorithm>using namespace std;int main(){ int a[10]={9,6,3,8,5,2,7,4,1,0}; for(int 

i=0;i<10;i++) cout<<a[i]<<endl;sort(a,a+10,less<int>()); for(int i=0;i<10;i++) cout<<a[i]<<endl; return 0;}#include<iostream>#include<algorithm>using namespace std;int 

main(){ int a[10]={9,6,3,8,5,2,7,4,1,0}; for(int i=0;i<10;i++) cout<<a[i]<<endl; sort(a,a+10,greater<int>()); for(int i=0;i<10;i++) cout<<a[i]<<endl; return 0;}例四:利用sort函数还

可以实现对字符的排序,排序方法大同小异,下面就把程序范例展示一下#include<iostream>#include<algorithm>using namespace std;int main(){ char a[11]="asdfghjklk"; 

for(int i=0;i<10;i++) cout<<a[i]<<endl; sort(a,a+10,greater<char>()); for(int i=0;i<10;i++) cout<<a[i]<<endl; return 0;}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值