protected继承,派生类对象如何访问基类成员?
有如下代码:
class A{public: void f(){cout << "From Class A: SHIT!" << endl;}};class B{public: void g(){cout << "From Class B:" << endl;}};void callf(A&a) {a.f();}void callg(B&b) {b.g();}#include<iostream>using namespace std;class A{public: void f(){cout << "From Class A: SHIT!" << endl;}};class B{public: void g(){cout << "From Class B:" << endl;}};void callf(A&a) {a.f();}void callg(B&b) {b.g();}class C:public A, protected B{};int main(){ C c; callf(c); callg(c); return 0;}#include<iostream>using namespace std;class A{public: void f(){cout << "From Class A: SHIT!" << endl;}};class B{public: virtual void g() // 改为virtual { cout << "From Class B:" << endl; }};void callf(A* a) {a->f();} // 改用指针void callg(B* b) {b->g();} // 改用指针class C:public A, protected B{};int main(){ C* c = new C; callf(c); callg(reinterpret_cast<B*>(c)); // 这个地方要进行强制转换 return 0;}
[解决办法]
用reinterpret_cast的话,太暴力了点。
如果reinterpret_cast也算,又何必改那么多?只需要改一句就行了。把main函数中的:
callg(c);
这句改成:
callg(reinterpret_cast<B&>(c));
其它都不用动。
[解决办法]