C++ private virtual:
本帖最后由 魔鬼的惊叹 于 2016-08-12 15:14 编辑private属性是不可继承的,derived只继承了base的callfun,但是在main中当derived对象调用callfun时,callfun中的fun函数是哪来的(derived类中没有fun函数定义),难道是virtual可以private继承的?
#include <iostream>
using namespace std;
class base
{
public:
void callfun()
{
fun();
}
private:
virtual void fun()
{
cout<<"in base"<<endl;
}
};
class derived:public base
{
};
int main()
{
derived n;
n.callfun();
return 0;
}
子类拥有父类的完整拷贝。 这个和virtual没有任何关系 private和virtual没有任何关系!
private和virtual没有任何关系!
private和virtual没有任何关系!
重要的事情说三遍。
只要父类中的函数是virtual,它就可以在子类里重载,并且展示多态性,private只是阻止子类直接访问父类的实现。 会继承过来的,你可以选择进行重新定义,如何没有新的定义的话,默认就是继承的 base类的实现吧。 感觉base和virtual要灵活运用,总之cpp这点很神奇,多态性 private 只在编译时有用, 运行时无用;
换句话说
你提供一个.h 一个.obj
别人改了你的.h里面的private为public,引用你原来的私有函数
然后链接以前编译的obj,一样能正确运行的 这个应该会产生编译错误吧,访问权限没问题吗?
virtual是运行时,private访问权限编译期就决定了
页:
[1]