#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(); }为什么有错误
时间: 2024-04-02 20:33:58 浏览: 45
使用include <iostream>时一定要加using namespace std
在上面的代码中,将Base类的继承方式设置为protected,表示派生类Der可以访问Base类的保护成员。但是在主函数中,尝试访问Der类的对象obj的成员函数时,却出现了错误。
这是因为在派生类Der中,虽然Base类中的fun()函数和fun2()函数都被设置成了protected,但是在Der类中,fun2()函数还是变成了protected。因此,无法在主函数中通过对象obj来调用fun2()函数。
如果将fun2()函数的访问权限改为public,程序就可以正常运行了。因此,将Base类中fun2()函数的访问权限改为public即可解决这个问题。
阅读全文