#include "stdafx.h" #include <iostream> #include <algorithm> using namespace std; class Base { public: int num; virtual void func() { cout<<"Do something in Base"<<endl; } }; class Derived:private Base { public: Derived(int i)/*:num(i)*/ //这样不行,在这里是初始化,而num在父类中已经进行了初始化 { num=i; //这样可以,在这里是赋值 } virtual void func() { cout<<"num="<<num<<endl; cout<<"Do something in Derived"<<endl; } public: using Base::num; //恢复访问属性 public: friend void getBasePtr(void); }; void getBasePtr(void) { Base* pb=new Derived(10); <span style="white-space:pre"> </span>//这样就可以啦 pb->func(); } int main() { //Base* pb=new Derived(10); <span style="white-space:pre"> </span>//使用private和protected的继承属性后,不可以这样赋值 //因为Base在Derived中已经是私有部分,不能在此处访问 //所以无法完成转换 getBasePtr(); system("pause"); return 0; }
C++的继承操作---基类指针访问派生类问题---基类成员恢复访问属性问题,布布扣,bubuko.com
C++的继承操作---基类指针访问派生类问题---基类成员恢复访问属性问题
原文:http://blog.csdn.net/cjc211322/article/details/38543155