C++多继承代码访问基类私有成员编译报错问题求助
问题根因
你的报错是C++类成员访问权限规则导致的,和头文件、多继承语法本身无关:
- 类的
private私有成员仅允许类自身的成员函数访问,派生类(哪怕是公有继承)、外部代码都没有直接访问权限 - 你在派生类
Derived的Display_Result成员函数里直接访问两个基类的私有成员Num1、Num2,自然触发编译报错
解决方案
这里提供两种符合C++规范的修改方案:
方案1:将基类私有成员改为保护成员protected
保护成员的特性是:类自身可访问,派生类可访问,外部不可访问,刚好匹配你的需求。修改对应基类的成员声明即可:
class BaseClass1 { protected: // 此处把private改成protected int Num1; public: void GetNumber(int); }; class BaseClass2 { protected: // 此处把private改成protected int Num2; public: void GetNumber1(int); };
修改后其余代码不变,即可正常编译运行。
方案2:为基类新增公有getter接口(更符合封装原则)
如果要严格遵循类封装规范,不对外暴露成员变量,可在基类中新增获取成员值的公有函数,派生类通过调用接口获取数值:
class BaseClass1 { private: int Num1; public: void GetNumber(int); int GetNum1() { return Num1; } // 新增getter接口 }; class BaseClass2 { private: int Num2; public: void GetNumber1(int); int GetNum2() { return Num2; } // 新增getter接口 };
再修改派生类的Display_Result函数,调用接口取值:
void Derived::Display_Result() { cout<<"Num1"<<GetNum1()<<endl; cout<<"Num2"<<GetNum2()<<endl; cout<<"Result"<<(GetNum2()*GetNum1())<<endl; }
内容的提问来源于stack exchange,提问作者akash
相关产品推荐
相关产品推荐

