前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++初阶 类和对象(补充)

C++初阶 类和对象(补充)

作者头像
大海里的番茄
发布2024-02-02 15:20:52
650
发布2024-02-02 15:20:52
举报
文章被收录于专栏:番茄_C语言番茄_C语言

一、友元

1.1什么是友元?

友元是一种用来突破封装的手段,使用友元可以访问到被封装的数据

1.2如何使用友元?

比方说,我有一个类叫A,它有一个成员为int _a;而这个成员我把它封装到private中了,那么在类外面显然是不能够正常访问到_a这个变量的,但是我们可以通过友元访问到,在类里面输入这串代码:friend+需要访问私有成员的函数名,之后这个函数便可以在类外面访问到A这个类的私有成员

1.3使用友元

正常情况下我们想直接拿到A中的_a编译器便直接报错了

可以看出,使用友元建立链接之后test便可以直接访问到A这个类中的_a

1.4使用友元注意事项

(1)友元函数可访问类的私有和保护成员,但不是类的成员函数 (2)友元函数不能用const修饰 (3)友元函数可以在类定义的任何地方声明,不受类访问限定符限制 (4)一个函数可以是多个类的友元函数 (5)友元函数的调用与普通函数的调用原理相同

二、初始化列表

2.1什么是初始化列表?

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。如此便可以初始化对应类的成员变量

2.2为什么要有初始化列表?

其实之所以要有初始化列表是因为构造函数直接写入无法定义const,引用这些一定义就必须要初始化的变量

2.3使用初始化列表

不使用初始化列表无法初始化const变量

使用初始化列表便可以解决这一问题

2.4注意事项

(1) 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次) (2)类中包含以下成员,必须放在初始化列表位置进行初始化:引用成员变量,const成员变量,自定义类型成员(且该类没有默认构造函数时) (3)尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化 (4)成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关

第四点验证:

代码语言:javascript
复制
#include<iostream>
using namespace std;
class A
{
public:
	A()
	:_a(666), _b(_a),_c(10)
	{

	}
	void Print()
	{
		cout<<_a<<" "<<_b<<" "<<_c<< endl;
	}
private:
	int _b;
	int _a;
	const int _c;
};
int main() 
{
	A a1;
	a1.Print();
}

可以看出,如果是根据初始化列表的顺序进行初始化,那么输出的值应该是666,666,10

实际上为666,随机值,10,这是因为编译器先定义_b,再定义_a,最后定义_c

调换一下_b和666的位置,果然输出666 666 10

综上所述可以证明 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、友元
    • 1.1什么是友元?
      • 1.2如何使用友元?
        • 1.3使用友元
          • 1.4使用友元注意事项
            • 二、初始化列表
              • 2.1什么是初始化列表?
              • 2.2为什么要有初始化列表?
              • 2.3使用初始化列表
              • 2.4注意事项
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档