如果虚函数引用C++中派生类中的变量,这是安全的吗?

Aft*_*ock 2 c++ visual-c++

派生时被抛回基地.安全,我的意思是它适用于已知的c ++编译器.它似乎适用于VIsual C++ 2008.例如

class zero
{
 virtual int v()=0;
}

class a: public zero
{
public:
   int value;
   a(int vin)
   {
      value =vin;
   }
   int v()
   {
      return value;
   }
}


zero *e1= new a(3);
cout << e1->v();
Run Code Online (Sandbox Code Playgroud)

jde*_*aan 14

这是安全且完全正确的行为.这就是为什么你有虚拟或纯虚拟方法的原因.大多数情况下,您需要隐藏实现细节并通过其接口(或纯虚拟类)操作对象.这是标准的,所有C++编译器都必须支持它.

  • @Aftershock请注意,e1的类型是指向零的指针.请注意,它指向的是(从创建它直到它被销毁的那一刻)类型a.指针的类型确实_not_改变它指向的类型,因为对象在创建后永远不会改变类型.你给出的原始示例只是一个多态性的教科书示例(谷歌的好关键字,以获取更多相关信息). (4认同)