引用:
独立引用:int &pm=m; 这个时候,pm和m是同一个内存单元,可以是变量,也可以是常量。const flaot &rz=1.0
传值:单向值传递:void func(int num) void main(){ int value=5; func(value) }【不改变实参的值】
传递指针: void func(int *pnum) void main(){ int value=5; func(&value)} 【指针pnum指向了value,为同一个空间,所以可以改变实参的值】
传递引用: void func(int &pnum); voiud main(){int value=5; func(value);}【就是一个独立引用,同样可以改变实参的值】
返回引用: int &f(int *pint){renturn *pint}; vid mian(){int a=10,b; b=f(&a)*5;f(&a)=88;} 结果: b=50 a=88;
抽象:(是相对的,不是绝对的)
类声明: class classname{数据成员; 函数成员;};类内: 在class函数内,类外:在class函数外; privete 和 protected 都是私有成员,不可被类外函数访问; public是共有成员,可以被类外函数访问;
类类型:函数参数: ①:counter func(counter obj) void main(){counter b2=func(b1)} b1指向obj,但是obj与b1的空间不一样,
②:对象引用: void func2(counter &obj) void main(){func2(b1)} b1和obj指向同一块空间。
③:对象指针:void func3(counter *obj) void main(){func3(&b1)} 同样,obj和b1指向同一块空间
对象数组:访问形式和struct 结构体一样。
初始化: point(){x=0;y=0;} point(float a){x=a;y=0} point(float a, float b){x=a,y=b;} 构造函数对其初始化 。 point array[3]={point(3,4),5} 第一个元素调用 point(flaot a,float b) 第二个元素5 调用函数 point (floata). 第三个函数元素为空,调用point().
对象的指针加减:
eg: counter array[3]={5,6,7} counter *p=array; (同理于struct 结构体),首先是指向首地址,arrray[0]. 随着 p++, 指针的指向发生改变!
静态成员:静态数据成员+静态成员函数
特征:①:共享数据(静态成员是属于类,而非一个对象!)②:静态数据成员未被定义的时候,默认为0; 也可声明为 privated 和 public
eg: class counter{static int count} void main(){counter a,b; } 则a,b这两个类都共享 count这个 数据。
构造函数:与类同名+没有返回类型+可以有参数+自动调用,完成对象初始化的工作
初始化方式:①:clock(int h, int m ,int s){Hour=h; Minute=m; Second=s} ②:clock(int h, int m, int s):Hour(h), Minute(m),Second(s);
在main函数中的初始化:①:counter1(8) 或者 counter2=9【这种方式是对于一个参数】; ②:clock1(3,5,1) 【这种可以有多个参数】 注意: clock2();这种不可以,因为【若构造函数存在参数,不允许对象无对应实参。】
重载构造函数;运用道理同构造函数
缺省参数的构造函数
clock(int h=0, int m=0,int s=0)【运用道理仍同于缺省的构造函数】
对于没有设置构造函数的,系统自动生成无参的构造函数且不做仍和任何工作。
析构函数:无返回类型+无参数+对象的生存期结束时自动调用,用于释放空间;形式:~cstring
同理于构造函数,若无显式说明,系统自动生成且不做任何工作。
注意:每创建一个新的对象,当其生存期结束后都会自动调用析构函数。
若对象开辟了一个空间且存入了数据,没有显式的写析构函数的时候,当对象被释放时,当该空间不会被释放,这个时候该空间就用不了
拷贝构造函数(注意一个浅拷贝即位拷贝)
功能:将同类的对象引用作为参数,将对象中的数据成员逐一赋值给新对象。
形式;point(point &obj)注意和类对象最为函数参数的形式: counter func(counter obj)
调用方式: point obj2(obj1)或 point obj3=obj2;(类似于struct 中的p=p1);
若没有显式的说明拷贝构造函数,则系统会自动生成一个,且做的式位拷贝(对象指向同一块空间,这个时候析构的话就会出现一个空间被释放两次!)
注意点:
在类外进行函数的说明,一定要加上作用域符
类的访问:对象名.数据成员(和struct结构体访问一样,同理于指针)
new开辟的空间,同样可用于class。eg: Baseclass *c1=new Baseclass();【新类】
private+public+protected
①:可以按任意顺序出现 ②:public protected private 可以多次出现 ③:一个成员只可以有一种访问属性!