当前位置:网站首页>继承和友元,静态成员的关系
继承和友元,静态成员的关系
2022-07-31 23:34:00 【华为云】
5.继承与友元
友元关系不能继承,也就是说基类友元可以访问基类的私有和保护成员,但是不能访问子类私有和保护成员
例如:你爸爸的朋友你不一定认识

class Student;//声明class Person{public: //声明Display函数是Person类的友元 friend void Display(const Person& p, const Student& s);private: string _name;};class Student: public Person{private: int _stuid;};void Display(const Person& p, const Student& s){ cout << p._name << endl; //可以访问 cout << s._stuid << endl;//不可以访问}若想让Display函数也能够访问派生类Student的私有和保护成员,只能在派生类Student当中进行友元声明
class Student : public Person{public: //声明Display函数是Student类的友元 friend void Display(const Person& p, const Student& s);protected: int _stuid; };6.继承与静态成员
基类定义了static静态成员,则整个继承体系里面只有一个这样的静态成员。无论派生出多少个子类,都只有一个static成员实例 。
例如:当基类Person中定义了一个静态成员变量count,派生类Student和Teacher都继承了基类Person的成员,但是再整个继承体系中,只有一个静态成员变量count
我们可以通过该静态成员变量count的数值,得知创建的对象个数
由于通过派生类/基类创建一个对象,都需要调用基类的构造函数/拷贝构造函数初始化基类的部分成员,所以我们可以在基类的构造函数/拷贝构造函数中累加_count的值,就可以得知创建了多少个对象
//基类class Person{public: //基类的构造函数 Person() { ++_count; } //基类的拷贝构造函数 Person(const Person& p) { ++_count; }public: static int _count;//静态成员变量protected: string _name;};int Person::_count = 0;//静态成员变量在类外初始化//派生类class Student :public Person{private: int _stuid;};//派生类class Teacher :public Person{private: int _teaid;};void func(Student s){}//可以通过_count的大小得知创建的对象的个数int main(){ Student s1; Student s2 = s1; Teacher t1; Person p; func(s1);//传值传参也是一次拷贝构造 //_count成员是同一个 整个继承体系里面只有一个这样的静态成员 cout << Person::_count << endl;//5 cout << Student::_count << endl;//5 return 0;}验证:整个继承体系里面只有一个这样的静态成员
//三者的地址相同cout << &Person::_count << endl;cout << &Student::_count << endl;cout << &Teacher::_count << endl;\
边栏推荐
猜你喜欢

一文概述:VPN的基本模型及业务类型

网易云信圈组上线实时互动频道,「破冰」弱关系社交

Advanced Algebra _ Proof _ Any matrix is similar to an upper triangular matrix
SQL27 View user details of different age groups

/etc/sysconfig/network-scripts 配置网卡

Handwritten a simple web server (B/S architecture)

MLP神经网络,GRNN神经网络,SVM神经网络以及深度学习神经网络对比识别人体健康非健康数据
![[1161. The maximum sum of elements in the layer]](/img/59/7810f425431779aa719458038ea0b3.png)
[1161. The maximum sum of elements in the layer]

景区手绘地图的绘制流程

【Acwing】第62场周赛 题解
随机推荐
新产品如何进行网络推广?
[1161. The maximum sum of elements in the layer]
编译型语言和解释型语言的区别
基于RT1052 Aworks nanopb string 类型固定长度使用方式(二十七)
@JsonFormat(pattern=“yyyy-MM-dd“)时间差问题
Advanced Algebra _ Proof _ Any matrix is similar to an upper triangular matrix
Thinking and Implementation of Object Cache Service
[QNX Hypervisor 2.2用户手册]9.15 suppress
基于simulink的Passive anti-islanding-UVP/OVP and UFP/OFP被动反孤岛模型仿真
Interview Question: Implementing Deadlocks
面试突击69:TCP 可靠吗?为什么?
【Acwing】第62场周赛 题解
Unity - LineRenderer show a line
不知道该怎么办的同步问题
2022-07-31:给出一个有n个点,m条有向边的图, 你可以施展魔法,把有向边,变成无向边, 比如A到B的有向边,权重为7。施展魔法之后,A和B通过该边到达彼此的代价都是7。 求,允许施展一次魔法
"SDOI2016" Journey Problem Solution
手写一个简单的web服务器(B/S架构)
thymeleaf迭代map集合
How to reduce the gap between software design and implementation
22年8月推广大使额外奖励规则