一个虚函数的访问权限问题

在水木上见到一个贴子,关于虚函数的访问权限问题:

#include < cstdlib >

#include
< iostream >

using   namespace  std;

 

class  B  {

public:

   
virtual int f1(){cout<<"B::f1()"<<endl;return 0;}

   
virtual void f2( int val){cout<<"B::f2(int)"<<endl;}

   
virtual int f3( int val ){cout<<"B::f3(int)"<<endl;return 0;}

}
;

 

class  D :  public  B  {

   
int f1(){cout<<"D::f1()"<<endl;return 0;}

   
virtual void f4(){cout<<"D::f4()"<<endl;}

   
int f3(int val){cout<<"D::f3(int)"<<endl;return 0;}

}
;

 

int  main( int  argc,  char   * argv[])

{

   B 
*bp = new D;

   bp
->f3(12);//D中的f3是private的,可以访问#1

   D 
*dp=new D;

   dp
->f3(12);//f3是private,访问不了,编译通不过

   system(
"PAUSE");

   
return EXIT_SUCCESS;

}


其实这是一个关于访问权限决定时间的问题,由于 访问权限是编译时间决定的,而不是运行时决定的。
B *bp = new D;  // 此时bp所指向的类型是B而不是D,而B的f3()是公有的,所以可以访问。
D *dp = new D; // 此时dp所指向的类型是D,而D的f3()是私有的,所以不能访问。

你可能感兴趣的:(一个虚函数的访问权限问题)