下列程序编译时会出现错误,请根据行号选择错误位置:1,2,4,5,6
#includeusing namespace std; class A{ int a1; protected: int a2; public: int a3; }; class B: public A{ int b1; protected: int b2; public: int b3; }; class C:private B{ int c1; protected: int c2; public: int c3; }; int main(){ B obb; C obc; cout< 根据上题子类对父类的不同继承可以得到下图:
对该题进行分析如下:
总结: 派生类中成员的访问属性:(1)基类中访问属性为公有public:派生类中可以访问;派生类外部(指建立派生类对象,在派生类的类外部)可以访问;下层公有派生类中可以访问。
(2)基类中访问属性为保护protected:派生类中可以访问;派生类外部(指建立派生类对象)不可访问;下层公有派生类中可以访问。
(3)基类中访问属性为私有private:派生类中可以访问;派生类外部(指建立派生类对象)不可访问;下层公有派生类中不可访问。
(4)私有继承和保护继承的区别(即在私有派生类和保护派生类中的区别):在直接派生类中,两者均为在类外不可访问,而在派生类中可以通过成员函数访问基类的私有成员和保护成员;若继续派生,私有成员在派生类中也无法访问。
(5)对于protected保护成员:其在基类中可以被访问;在派生类中可以被访问;但类的实例(创建类的对象)无法访问。
对上图进行总结+扩充:(1)一个类的访问控制为:
public:公有成员,可以被类内及类外访问。
private:私有成员,只能被内部访问。
protected:保护成员,只能被内部或继承类内部访问。(2)继承类的访问修饰符为:
无论何种继承,在继承类中父类的私有成员在子类中依然存在,但均不可访问。
public:公有继承,父类成员在子类中保持原有的访问属性。
private:私有继承,父类成员在子类中成为私有成员。
protected:保护继承,public和protected均变为protected,private也变为private。



