#include<iostream> using namespace std; class Base { private: void fun()const{cout<<"fun";} protected: void fun2()const{cout<<"fun2";} public: void fun3()const{cout<<"fun3";} }; class Der:protected Base { public: void fun4()const{cout<<"fun4";} }; int main() { Der obj; obj.fun(); obj.fun2(); obj.fun3(); obj.fun4(); }为什么有错误
时间: 2024-04-02 07:34:02 浏览: 69
在上面的代码中,将Base类的继承方式设置为protected,表示派生类Der可以访问Base类的保护成员。但是在主函数中,尝试访问Der类的对象obj的成员函数时,却出现了错误。
这是因为在派生类Der中,Base类中的私有成员函数fun()在派生类中不可访问,因此无法在主函数中通过对象obj来调用fun()函数。如果将fun()函数的访问权限改为protected或public,程序就可以正常运行了。
因此,将Base类中fun()函数的访问权限改为protected或public即可解决这个问题。
相关问题
#include<iostream> using namespace std; class Base { protected: void fun()const{cout<<"fun";} void fun2()const{cout<<"fun2";} public: void fun3()const{cout<<"fun3";} }; class Der:protected Base { public: void fun4()const{cout<<"fun4";} }; int main() { Der obj; obj.fun(); obj.fun2(); obj.fun3(); obj.fun4(); }为什么有错误
在上面的代码中,将Base类的继承方式设置为protected,表示派生类Der可以访问Base类的保护成员。但是在主函数中,尝试访问Der类的对象obj的成员函数时,却出现了错误。
这是因为在派生类Der中,虽然Base类中的fun()函数和fun2()函数都被设置成了protected,但是在Der类中,fun2()函数还是变成了protected。因此,无法在主函数中通过对象obj来调用fun2()函数。
如果将fun2()函数的访问权限改为public,程序就可以正常运行了。因此,将Base类中fun2()函数的访问权限改为public即可解决这个问题。
#include<iostream> using namespace std; class Base { public: void fun()const{cout<<"fun";} void fun2()const{cout<<"fun2";} void fun3()const{cout<<"fun3";} }; class Der:protected Base { public: void fun4()const{cout<<"fun4";} }; int main() { Der obj; obj.fun(); obj.fun2(); obj.fun3(); obj.fun4(); }为什么有错误
在上面的代码中,将Base类中的fun()、fun2()、fun3()函数的访问权限都设置为public,表示这些成员函数可以被所有的类和对象访问。
但是在派生类Der中,将Base类的继承方式设置为protected,表示派生类Der可以访问Base类的保护成员。因此,在主函数中,通过Der类的对象obj来访问Base类的成员函数是无法实现的。
如果将Der类中Base类的继承方式改为public,程序就可以正常运行了。因此,将Der类中Base类的继承方式改为public即可解决这个问题。
阅读全文