C++虚函数探讨(四)

2014-11-24 12:34:51 · 作者: · 浏览: 0

环境:VS2010

代码:

//public:

#include

using namespace std;

class A{

public:

virtual ~A() {}

virtual void func() {

printf("A::func()\n");

};

};

class B: public A{

private:

virtual void func(){

printf("B::func()\n");

};

};

int main(void){

A *p = new B;

p->func();

delete p;

}

//private:

#include

using namespace std;

class A{

public:

virtual ~A() {}

virtual void func() {

printf("A::func()\n");

};

};

class B: private A{

public:

virtual void func(){

printf("B::func()\n");

};

};

int main(void){

A *p = (A*)new B;

p->func();

delete p;

}

观察以上两个程序的输出结果。

1.共有继承,派生类虚函数为private输出结果:

\

2.私有继承,派生类虚函数为public输出结果:

\

发现输出结果一致。

总结:多态与成员函数的访问权限是没有关系的, 即两回事. 基类定义了虚函数, 并且是public的.那么子类只要override虚函数 无论放在什么样的访问权限(private,protect,public), 都以基类的访问权限为准, 即是public的.

作者 Wentasy