[疑问]C/C++中为什么在类外利用多态基类指向派生类指针可以调用类的私有成员函数?
2012-04-06 20:43
561 查看
class Base { protected: Base(){} ~Base(){} public: virtual void print() { cout<<"Base::print()!"<<endl; } }; class Derived:public Base { public: Derived(){} ~Derived(){} private: void print() { cout<<"Derived::print()!"<<endl; } }; int main(int argc,char*argv[]) { Derived d; Base *pB = &d; pB->print(); return 0; }
问题补充:
结果输出的是 Derived::print()! visual studio 2008测试 问题是如果derived类以拷贝构造函数给base那么pB是指向derived 问题是在类外怎么能访问私有成员函数呢? 回答:
这没错啊,print是一个虚函数,pB指向都内容是Derived,所以 pB->print() 调用的是Derivied::print()。 至于private的问题,因为pB是指向Base的指针,调用Base的private函数是可以的(只不过Base::print()那个虚函数指针的内容是 Derivied::print()).
相关文章推荐
- C/C++中为什么在类外利用多态基类指向派生类指针可以调用类的私有成员函数?
- C++中通过派生类调用第二基类的普通成员函数时this指针的调整
- 多态继承情况下,有一个基类指针指向派生类对象,如何用它调用基类的虚函数?
- 为什么基类指针可以指向派生类对象,而派生类则不可以指向基类
- 浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?
- 为什么基类指针和引用可以指向派生类对象,但是反过来不行?
- 为什么通过空指针(NULL)可以正确调用一些类的成员函数?
- 浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?
- 为什么基类指针和引用可以指向派生类对象,但是反过来不行?
- 为什么通过空指针(NULL)可以正确调用一些类的成员函数?
- 为什么通过空指针(NULL)可以正确调用类的部分成员函数
- C++中vritual虚函数漏洞,通过指针(利用虚表,调用函数)任然可以访问到基类中虚函数。
- C++如何在派生类成员函数内调用基类的成员函数(包括构造函数)
- 对象指针为NULL,为什么还是可以调用成员函数
- 解释为什么基类的析构函数不为虚的话,基类指针指向子类对象,删除对象时,派生类的析构函数就不会被调用
- 为什么通过空指针(NULL)可以正确调用一些类的成员函数?
- 为什么基类指针和引用可以指向派生类对象,但是反过来不行?
- 浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?
- C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? https://www.zhihu.com/question/30838092/answer/49623765
- 为什么基类指针和引用可以指向派生类对象,但是反过来不行?