c++之类与对象(third)

再谈构造函数:

构造函数赋值:

在创建对象时,编译器会自动调用构造函数进行赋值,之前简单来说叫初始化,但这里不能叫做初始化,因为初始化只能初始化一次,在构造函数体内可以重复赋值,所以出现了初始化列表。

初始化列表:

以一个:(冒号)开始,接着是以,(逗号)分隔的数据成员列表,每个”成员变量“后面跟一个放在括号中的初始值或表达式

Date(int year, int month, int day)
	:_year(year)
	,_month(month)
	,_day(day)
    { }

注意:

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

2.类中包含以下成员,必须放在初始化列表位置进行初始化:

   引用成员变量

   const成员变量

   自定义类型成员(该类没有默认构造函数)

private:
 int& _ref;//引用
 const int_n;//const
 A _obj;//没有默认构造函数

   为什么是这三个?因为这三个必须要在定义时初始化(恰恰符合初始化列表的性质)

成员初始化阶段完成后,才会执行构造函数体中的代码。构造函数体中的代码主要用于对对象进行进一步的设置和操作,本质上是对已经初始化的成员变量进行赋值或其他操作。

{  }里面是构造函数体内赋值

简单来说,就是分为两个阶段,一个是初始化列表初始化,一个是函数体内赋值

如果初始化时没有初始化,也就是上述三种情况,就会导致编译不过去(即使你在函数体内赋值)

它连第一阶段都过不去,自然不会去第二阶段

3.尽量使用初始化列表初始化,因为不管你使用不使用,都会先使用初始化列表初始化

4.成员变量在类中声明的顺序就是初始化列表初始化的顺序,所以建议初始化列表里的顺序与声明    时候的顺序一样。

static成员

概念:用static修饰的成员变量叫类的静态成员,用static修饰的成员变量叫类的静态成员函数

注意:

1.静态成员不属于哪个对象,是属于类的所有对象,大家共用一个,静态成员存储在静态区

   静态成员函数存储在代码段

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

3.类静态成员变量用类名加::静态成员或者对象.静态成员来访问(int Date::_count = 0;)

4.静态成员函数没有隐含的this指针,不能访问任何非静态成员

5.静态成员和类的普通成员一样,也有public、protected、private3种访问级别,也可以具有返回值

友元函数:

友元分为友元函数和友元类,提供了一种突破封装的方式,但会增加耦合度(建议少用)

这与前面的操作符重载做解释,当操作符重载定义在类外面就没有隐含的this指针,所以只能访问public,友元的作用就在此。

假设一种情况,操作符重载<<,重载时会与cout冲突,因为cout占了第一个位置,本来是传参时传给隐含的this指针的参数,所以只能定义在类外面,但这又不能访问类内私有的成员,所以这时候要用友元函数

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

注意:

1.友元函数可以访问类内的成员变量,但不是类的成员函数

2.友元函数不能用const修饰,因为没有隐含的this指针

友元类

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

在class student类中声明friend class Date,Date中的所有函数都可以访问student中的所有非公有成员

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值