类的继承
(1)#include<iostream.h>
class A
{
public:
void funA();
protected:
int a1;
private:
int a2;
};
class B:public A
{
public:
void funB();
protected:
int b1;
private:
int b2;
};
class C:private B
{
public:
void funC();
};
请回答下列问题:
1)派生类B中的成员函数funB()能否访问基类A中的成员函数funA()和成员变量a1,a2。
2) 派生类B的对象能否访问基类A中的成员函数funA()和成员变量a1,a2。
3) 派生类C中的成员函数funC()能否访问基类B中的成员函数funB()和成员变量b1,b2。
4) 派生类C中的成员函数funC()能否访问基类A中的成员函数funA()和成员变量a1,a2。
5) 派生类C中的对象能否访问基类B中的成员函数funB()和成员变量b1,b2。
6) 派生类C中的对象能否访问基类A中的成员函数funB()和成员变量a1,a2。
(2)设有以下类的定义:
class base
{
int m1;
protected:int m2;
public:int m3;
};
class derive:private base
{
int n1;
protected:int n2;
public:int n3;
};
请按访问权限写出派生类derive中具有的各中成员
公有成员:
保护成员:
私有成员:
答案:
(1)
1)派生类B中的成员函数funB()能访问基类A中的成员函数funA()和成员变量a1,但是不能访问成员变量a2。
2)派生类B的对象能访问基类A中成员函数funA(),但不能成员变量a1和a2。
3)派生类C中的成员函数funC()能访问基类B中的成员函数funB()和成员变量b1,但是不能访问成员变量b2。
4)派生类C中的成员函数funC()能访问基类A中的成员函数funA()和成员变量a1,但是不能访问成员变量a2。
5)派生类C中的对象不能访问基类B中的成员函数funB(),成员变量b1和b2。
6)派生类C中的对象不能访问基类A中的成员函数funA(),成员变量a1和a2。
(2)
m3,
n2,
m2、m3、n1
总结:
派生类的成员函数可以访问基类的成员函数,对象要依据派生属性来决定。基类的private对派生类是不可见的。
在私有继承方式下,基类的公有成员和保护成员都作为派生类的私有成员,基类的私有成员对于派生类而言是不可见的,即派生类不可以访问基类中中的私有成员。因此,基类的私有成员包括m2、m3和n1,m2和m3是从基类继承而来的。