当前位置:编程学习 > C/C++ >>

C++虚函数探讨(四)

 

环境:VS2010

代码:

 

//public: 

#include <iostream> 

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 <iostream> 

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

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,