友元关系与继承以及基类派生类定义构造函数时应该注意的事项
2014-12-25 21:42
435 查看
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;}//友元关系不能继承
}*/
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#中基类和派生类的构造函数以及变量的执行顺序整理
- 鸡啄米:C++编程入门系列之四十二(继承与派生:虚基类及其派生类的构造函数)
- c++, 派生类的构造函数和析构函数 , [ 以及operator=不能被继承 or Not的探讨]
- Spring2 AOP Bean有继承关系时,需注意的事项
- Android SDK版本号与API级别的对应关系以及创建工程时选择API版本的注意事项
- 关于继承,不同继承方式,对于派生类成员以及基类的可见性
- 【OC学习-12】什么是类的继承?为什么要继承?以及继承里面的注意事项
- 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
- 基类和派生类的关系以及调用范围
- 派生类的构造函数 与基类的调用关系
- 总结关于工程师同志们接单应该注意的事项以及说说我在接单时候遇到的种种囧事(原创作者:gooogleman)
- java中定义常量的方法、性能以及注意事项
- 派生类的构造函数定义以及参数传递
- C++ 派生类虚函数定义---注意事项
- protected的使用注意事项针对继承关系的可继承性
- (转)关于继承,不同继承方式,对于派生类成员以及基类的可见性
- 继承关系中基类和子类构造函数的调用顺序
- 基类的构造函数带参数,如何定义其派生类
- 关于继承,不同继承方式,对于派生类成员以及基类的可见性