继承包括公有继承(public),保护继承(protected)和私有继承(private),不同的继承方式,子类对父类都有不同的访问权限.
继承一般形式:
Class<子类名>:<继承方式><父类名> //继承方式:public(表示公有继承),private(私有继承),protected(保护继承)
{
public:
<公有数据和函数>
protected:
<保护数据和函数>
Private:
<私有数据和函数>
};
Ps:父类中的私有函数和数据不可被子类访问.
(1) 公有继承:
公有继承中,子类成员可以访问基类中的公有和保护成员与函数,在类外可以对应访问子类中公有的成员函数.
(2) 保护继承:
基类中除私有成员外,继承到子类中都将变为保护的数据和函数,在类外将不可被访问.
(3) 私有继承:
私有继承中私有成员外,继承到子类中都将变为私有的数据和函数,在类外将不可被访问.
2.多继承
单继承可以看做是多继承的一个特例,多继承可以看做是单继承的一个组合
代码的一般形式:
Class<父类名>:<继承方式><子类名1>,...<继承方式><子类名n>
{
定义子类直接的成员;
};
二义性:
class baseclass1
{
public:
Void seta(int x){a=x}
void show()
{cout<<a;}
};
Class baseclass2
{
public:
void seta(int x){b=x}
void show()
{cout<<b;}
}
Class deriveclass:public baseclass1,public baseclass2
{
};
int main()
{
deriveclass obj;
obj.seta(2);
Obj.show(); //出现二义性
obj.setb(6);
Obj.show(); //出现二义性
}
出现类似上述情况,代码不能编译.
解决方法:
在调用相应函数时在前面加上作用域运算符
例:
obj.classbase1::show();
或在deriveclass类中定义新的函数:
Void deriveclass::show()
{
baseclass1::show();
Baseclass2::show();
}
原文:https://www.cnblogs.com/zxy20020103/p/14671807.html