标签:初始化 函数 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修饰。
友元类:
友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非共有成员 。
友元关系是单向的,不具有交换性。
友元关系不具有传递性。
标签:初始化,函数,23,对象,终结,成员,访问,静态,变量
来源: https://blog.51cto.com/15085121/2670117
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。