C++ - 初始化列表、友元、static成员
2022/1/20 22:12:38
本文主要是介绍C++ - 初始化列表、友元、static成员,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
一、初始化列表
二、static成员
三、友元
一、初始化列表
初始化列表写在构造函数参数下面,用冒号开始,逗号分隔,每一个成员属性后用括号内的参数进行初始化。
class Date { public: Date(int year, int month, int day) : _year(year) , _month(month) , _day(day) {} private: int _year; int _month; int _day; };
为什么使用初始化列表,是因为成员属性一个初始化的时机。如果是普通的int类型等不需要初始化的属性,可不用初始化列表。但若是const类型的属性需要在定义的时候就初始化好,这时我们就一定要使用初始化列表来初始化这类属性,包含引用成员变量 、const成员变量 、自定义类型成员(该类没有默认构造函数)。
class A { public: A(int a)//没有默认构造函数 :_a(a) {} private: int _a; }; class B { public: B(int a, int b) :_a(a) ,_b(b) ,_c(1) {} private: A a; // 没有默认构造函数 int& b; // 引用 const int c; // const };成员变量的初始化顺序与初始化列表写的顺序无关,与成员变量定义的顺序有关。上述B类中的初始化顺序就是a->b->c。
二、static成员
在类中的属性前加static就是静态属性,在函数前加static就是静态成员函数。
在类中设置静态变量_scount,该变量生命周期不会随着一个对象结束而结束,任意一个该类的对象都会操作该属性。而静态函数GetACount,任意不同的对象调用该函数都是一样的,也可以直接使用A::来调用函数。个人理解,静态的成员因为其生命周期在一个类中,相当于该类的不同对象共同使用。初始化要在类外。
class A { public: A() {++_scount;} A(const A& t) {++_scount;} static int GetACount() { return _scount;} private: static int _scount; }; int A::_count = 0; void TestA() { cout<<A::GetACount()<<endl; A a1, a2; A a3(a1); cout<<A::GetACount()<<endl; }
c++11中支持非静态成员变量在声明时进行初始化赋值,但要注意这里不是初始化,而是为定义初始时提供一个缺省值。如果构造函数初始化列表中没有初始化,那么就会用这个默认值进行初始化。
class A { public: private: // 非静态成员变量,可以在成员声明时给缺省值。 int a = 10; static int n; }; int A::n = 10;
三、友元
由于c++中的封装特性,一个类的私有属性是其他函数或者类不能直接访问的。如果一定要访
问,可以将这些类或函数定义为友元函数或友元类。
class B {}; class A { friend void f(); friend class B; private: int _a; }; void f() { cout<< _a << endl; }
将B类和f()函数定义为A的友元类后,B和f()就可以访问A的私有属性。但需要注意的是,友元类只是一个单向的关系,A并不能访问B的私有属性。
友元函数f()不能用const修饰。
这篇关于C++ - 初始化列表、友元、static成员的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升