c++类与对象<三>初始化列表,静态成员,友元,匿名对象

本文介绍了C++中构造函数的成员初始化列表、static成员的作用、匿名对象的使用、友元的概念以及内部类的特性。强调了对象返回和函数传参时的最佳实践,提醒读者注意封装和性能优化。

目录

前言

一:再次认识构造函数之成员初始化列表初始化成员变量

1.类对象整体的定义与对象中每个成员变量的定义

2.初始化列表

3.explicit 关键字

二:static成员 

1.概念

2.经典实例:实现一个类,计算程序中创建出了多少个类对象

3.特点总结 

三:匿名对象

 1.匿名对象就像结构体的匿名对象一样,只能使用一次,生命周期只在这一行

2.常见使用场景举例

当要定义一个类对象来调用成员函数或者返回时,这时就可以用匿名对象直接来调用

四:友元 

1.基本知识

2.友元函数

3.友元类

五:内部类

 六:对象返回和函数传参总结

1.对象返回

1.接收返回值对象,尽量使用拷贝构造方式接受,不要赋值接收

2.函数中返回对象时,尽量使用匿名对象

2.函数传参

尽量使用const &传参

接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

前言

在经过前面类与对象关于构造函数,析构函数,拷贝构造,运算符重载,引用等知识的铺垫后,接下来将会继续介绍关于类与对象剩下的一些小知识

一:再次认识构造函数之成员初始化列表初始化成员变量

1.类对象整体的定义与对象中每个成员变量的定义

 这样对于每个成员变量初始化的位置便就是使用初始化列表定义初始化

2.初始化列表

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

1.不管哪个对象调用构造函数,初始化列表是它所有成员变量定义初始化的地方

2.不管是否显示gengefangzaikuohaozhongde写初始化列表,编译器都会将每个成员变量在初始化列表定义初始化 

3.每个成员变量只能在初始化列表出现一次

4.类中的这三类成员,必须在初始化列表初始化

a.引用成员变量  b. const 成员变量(const修饰的变量只能初始化一次) 

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

5.尽量使用初始化列表初始化,不管是否使用初始化列表,类成员变量都会在初始化列表初始化

6.成员变量在类中的声明顺序就是在初始化列表的初始化顺序,如果误用将造成一些无法预知的后果

这个就是用初始化列表初始化时,先初始化了_a2,而_a1未初始化就是随机值

3.explicit 关键字

 

添加explicit关键字 就不允许隐式类型转换

二:static成员 

1.概念

用static修饰的成员变量,称为静态成员变量;用static修饰的成员函数,称为静态成员函数

静态成员变量一定要在类外进行初始化

2.经典实例:实现一个类,计算程序中创建出了多少个类对象

 当count成员变量私有时用静态成员函数返回

3.特点总结 

1.静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区

2.静态成员变量必须在类外定义初始化,在类中只是声明

3.类静态成员即可用类名::静态成员或者对象.静态成员来访问

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

三:匿名对象

 1.匿名对象就像结构体的匿名对象一样,只能使用一次,生命周期只在这一行

2.常见使用场景举例

当要定义一个类对象来调用成员函数或者返回时,这时就可以用匿名对象直接来调用

形式  类名()  如:Sum().成员变量或成员函数  

四:友元 

1.基本知识

友元提供了一种突破封装的方式,提供了便利,但友元会增加耦合度,破坏了封装,不建议大量使用的  友元分为友元函数和友元类

2.友元函数

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

 2.友元函数不能用const修饰

3.友元函数可以在类定义的任何地方声明,不受类访问限定符的限制

4.一个函数可以是多个类的友元函数

5.有缘函数的调用与普通函数的调用原理相同

3.友元类

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

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

在类A中声明类B为友元类,那么类B可以直接访问类A的所有私有成员,但A不能访问B的私有成员

3.友元关系不能传递

4.友元关系不能继承

五:内部类

1.在一个类中定义另一个类,这个类就叫做内部类

2.内部类是一个独立的类它不属于外部类,不能通过外部类的对象去访问内部类的成员,但内部类的对象可以去访问外部类的成员

3.内部类就是外部类的友元类

4.sizeof(外部类)=外部类,和内部类没有关系

 六:对象返回和函数传参总结

1.对象返回

1.接收返回值对象,尽量使用拷贝构造方式接受,不要赋值接收
2.函数中返回对象时,尽量使用匿名对象

2.函数传参

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值