友元关系与继承以及基类派生类定义构造函数时应该注意的事项
来源:互联网 发布:mac苹果电脑备份 编辑:程序博客网 时间:2024/05/16 14:00
1、像其他类一样,基类或派生类可以使其他类或函数成为友元,友元可以访问类的private,protected成员;
2、友元关系不能继承。基类的友元对派生类的成员没有特殊访问权限,如果基类被授予友元关系,则只有基类具有特殊的访问权限,该基类的派生类不能访问授予友元关系的类;
3、如果派生类想要将自己成员的访问权限授予基类的友元,则必须显示的在派生类中指定友元关系即包含friend字段;
4、如果类有派生类则需指定默认的构造函数,因为在调用派生类构造函数时,会先调用基类的默认构造函数;
5、友元关系不能继承;
c++第四版 书本例子
#include <iostream>
using namespace std;
class Base
{
public:
friend class Frnd;
Base(int init):i(init){}
protected:
Base(){}//如果有派生类则需指定默认的构造函数,因为在调用派生类构造函数时,会先调用基类的默认构造函数
int i;
};
class D1 : public Base
{
friend class Frnd;//派生类中显示指定友元关系
public:
D1(int init1,int k):j(init1),m(k){}
protected:
int j;
int m;
};
class Frnd
{
public:
int mem(Base b)
{
return b.i;
}
int men(D1 d)//不要写成D1 d(int,int)
{
return d.i;
}
};
int main()
{
Base base(1);
D1 d1(1,1);
//base.i = 1;
Frnd frnd;
cout << frnd.mem(base)<< endl;
cout << frnd.men(d1)<< endl;
//cout << "Hello world!" << endl;
return 0;
}
/*class D2 :public Frnd
{
public:
int mem(Base b){ return b.i;}//友元关系不能继承
}*/
- 友元关系与继承以及基类派生类定义构造函数时应该注意的事项
- C++派生类中定义基类的虚函数时需注意的事项
- 继承与派生:派生类的构造函数
- 继承与派生:虚基类及其派生类的构造函数
- 三十九、继承与派生:派生类的构造函数****
- 派生类的构造函数定义以及参数传递
- 类的继承与派生中关于构造函数
- 继承与派生3:派生类的构造函数与析构函数
- 多重继承派生类的构造函数
- 多重继承派生类的构造函数
- 多重继承派生类的构造函数
- 【C++继承与派生之二】有子对象的派生类的构造函数
- 四十二、继承与派生:虚基类及其派生类的构造函数
- 鸡啄米:C++编程入门系列之三十九(继承与派生:派生类的构造函数)
- 继承与派生2:派生类的定义
- 派生类的构造函数 与基类的调用关系
- 第十一周 领会继承以及基类、派生类中构造函数的写法以及执行过程
- C++-继承:基类与派生类的关系
- 无向网图的邻接矩阵存储结构
- TFS 使用文档 - 客户端测试(c++/c)
- 【剑指Offer面试编程题】题目1506:求1+2+3+...+n--九度OJ
- LeetCode[Tree]: Convert Sorted Array to Binary Search Tree
- 好的开源的Android的ui项目
- 友元关系与继承以及基类派生类定义构造函数时应该注意的事项
- html5编码规范
- C 数字1、2、3、4用不全相等的数字组成的三位数及其个数
- (每日算法)Leetcode --- Maximal Rectangle(最大子矩阵)
- 研究方向的思考
- Vs2013在Linux开发中的应用(22):模块加载
- 模拟总结
- 一种采用 Win32 CreateWindow 方式的模态窗口
- 最速下降法/steepest descent,牛顿法/newton,共轭方向法/conjugate direction,共轭梯度法/conjugate gradient 及其他