私有继承与保护继承(protected 成员)
程序员文章站
2022-07-15 21:55:04
...
私有继承(private):
- 继承的访问控制:
- 基类的public和protected成员:都以private身份出现在派生类中
- 基类的private成员:不可直接访问
- 访问权限:
- 派生类中的成员函数:可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员
- 通过派生类的对象:不能直接访问从基类继承的任何成员
- 继承的访问控制:
- 基类的public和protected成员:都以protected身份出现在派生类中
- 基类的private成员:不可直接访问
- 访问权限:
- 派生类中的成员函数:可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员
- 通过派生类的对象:不能直接访问从基类继承的任何成员
protected 成员的特点与作用:
- 对建立其所在类对象的模块来说,它与 private 成员的性质相同
- 对于其派生类来说,它与 public 成员的性质相同
- 既实现了数据隐藏,又方便继承,实现代码重用
- 如果派生类有多个基类,也就是多继承时,可以用不同的方式继承每个基类
#include<iostream>
using namespace std;
class A
{
public:
void SetA(int x) { this->x = x; }
private:
int x;
};
class B
{
public:
void SetB(int x) { this->y = y; }
private:
int y;
};
class C
{
protected:
void SetC(int x) { this->y = y; }
private:
int y;
};
class ABC: public A, protected B
{
public:
void SetABC(int x, int y, int z)
{
SetA(x);
SetB(y);
this->z = z;
}
private:
int z;
};
class ABC2: private ABC
{
public:
void SetABC2(int x) { SetB(x); }
};
int main(void)
{
ABC s1;
s1.SetA(5);
//s1.SetB(6); 非法!因为类B是保护继承,所以通过派生类的对象:不能直接访问从基类继承的任何成员
s1.SetABC(2, 5, 6);
}
上一篇: JQuery 自动触发事件