3-23(类与对象终结)

3、类与对象下

类里面的成员函数被调用时,都是隐藏着this指针,而类外的函数没有this指针。


再谈构造函数:

初始化列表:类成员变量定义的地方,也就是初始化。

以一个冒号开始;逗号分隔;每个成员变量后面跟一个放在括号中的初始值或表达式。

注意:

每个成员变量在始化列表中只能出现一次(初始化只能初始化一次),

以下成员必须在初始化列表中初始化:

const成员变量;

引用成员变量;

自定义类型成员(无默认构造函数,也就是没有不需要传参的构造函数)。

成员变量在类中声明的顺序就是其在初始化列表中的初始化顺序,与在初始化列表中的先后次序无关。


explicit:

explicit修饰的构造函数,将会禁止单参构造函数的隐式转换,

如: Data d1=1;   //正确的,但是其是将1隐式为临时的Data型变量,再将临时的变量拷贝给d1。

Data& d1=1;         //错误的,因为1隐式转换的变量具有常性,不能改变,所以d1需要加const。

const Data& d1=1; //正确的。

如果加了explicit,就不能隐式转换了。



static成员

被static修饰的成员叫做静态成员,是存储在静态区的,是全局的,不是局限于某个对象使用的;

静态的成员变量一定在类外定义(初始化)。


特性:

静态成员变量为所有类对象所共有,不属于某个具体的实例。

静态成员变量必须在类外定义,定义时不加static关键字。

静态成员函数没有this指针,不能访问任何非静态成员。

非静态成员函数可以访问静态的成员函数。

因为类中各成员都是通过this指针来访问。

总结:

静态成员相当于全局成员,访问的时候不是由某个对象去访问,而是由类加域解释符访问。

如:Date::print();访问Date的静态成员方法。

类外不能直接访问类的私有成员,类内部可以直接访问,所以类外想要访问类内部成员,需要在类内部构建成员函数,在外部访问成员函数,继而访问类私有成员。




声明时给缺省值:

非静态成员可以在声明的时候给缺省值:

如:

private:

int _year=10;

int _month=2;

这都是声明的时候给了缺省值。



友元:(相当于朋友)

友元函数:相当于全局函数。

可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但是声明的时候需要在类内部声明,声明时需要加上friend关键字。

注意

友元函数可以访问类的私有和保护成员,但不是类的成员函数。

友元函数不能用const修饰。


友元类:

友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非共有成员 。

友元关系是单向的,不具有交换性。

友元关系不具有传递性。




猜你喜欢

转载自blog.51cto.com/15085121/2670117