参考:http://www.weixueyuan.net/view/6362.html
总结:
假设类C继承自类B,类B继承自类A。那么类C中的除了能够继承B类的成员函数和成员变量外,同样也能继承B类继承自A类的所有成员。换言之,类C可以继承来自类A的所有成员。因此继承既可以是直接继承,也可以是间接继承。
例1:
class A
{
public:
int getx(){return x;}
void setx(int a){x = a;}
private:
int x;
}; class B : public A
{
public:
int gety(){return y;}
void sety(int b){y = b;}
private:
int y;
}; class C : public B
{
public:
int getz(){return z;}
void setz(int c){z = c;}
private:
int z;
};
在本例中,先定义了类A,然后通过派生定义了类B,之后再派生出类C。B类和C类都有自己新增的成员变量和成员函数。下面我们将以表格的形式列出类A、B和C的所有成员和成员变量。
类 | 成员 | 属性 | 来源 |
---|---|---|---|
A | x | private | 自身 |
getx | public | 自身 | |
setx | public | 自身 | |
B | x | 不可访问 | 继承自类A |
setx | public | 继承自类A | |
getx | public | 继承自类A | |
y | private | 类B新增 | |
sety | public | 类B新增 | |
gety | public | 类B新增 | |
C | x | 不可访问 | 继承自类B |
setx | public | 继承自类B | |
getx | public | 继承自类B | |
y | 不可访问 | 继承自类B | |
sety | public | 继承自类B | |
gety | public | 继承自类B | |
z | private | 类C新增 | |
setz | public | 类C新增 | |
getz | public | 类C新增 |
从表中我们可以看出类C不仅包含B类的成员,同时还包含了类A中的成员,在表格中我们都这些成员都统一归为继承自类B,而实际上我们也可以将成员变量x及成员函数setx和getx视为间接继承自类A。当然,间接继承所得的成员变量和成员函数,其属性遵循直接继承时的规则。