【发布时间】:2015-10-12 02:23:18
【问题描述】:
Derived 类中的方法fun() 是私有的。当我们通过运行时多态调用函数ptr->fun() 时,它正在执行。
但这违反了 Derived 类的封装属性。
#include<iostream>
using namespace std;
class Derived;
class Base {
private:
virtual void fun() { cout << "Base Fun"; }
friend int main();
};
class Derived: public Base {
private:
void fun() { cout << "Derived Fun"; }
};
int main()
{
Base *ptr = new Derived;
ptr->fun();
return 0;
}
谁能解释一下发生了什么?
【问题讨论】:
-
朋友可以访问私人会员。您将主要成员声明为朋友,因此可以访问私有成员。 (你为什么这样做对我来说是一个奇迹)
-
@tobi303,朋友可以访问
Base而不是Derived的私有,并且在程序运行时调用的fun()是fun()的Derived类。顺便说一句,我正在玩 c++ 概念,所以遇到了这个..没什么实用的..
标签: c++ polymorphism private encapsulation