魔鬼的惊叹 发表于 2016-08-12 15:12

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;
}

idi0t 发表于 2016-08-12 16:54

子类拥有父类的完整拷贝。

matchbox1224 发表于 2016-08-12 17:13

这个和virtual没有任何关系

windoze 发表于 2016-08-12 21:55

private和virtual没有任何关系!
private和virtual没有任何关系!
private和virtual没有任何关系!
重要的事情说三遍。

只要父类中的函数是virtual,它就可以在子类里重载,并且展示多态性,private只是阻止子类直接访问父类的实现。

a742794196 发表于 2016-08-17 09:03

会继承过来的,你可以选择进行重新定义,如何没有新的定义的话,默认就是继承的 base类的实现吧。

action08 发表于 2016-08-19 07:58

感觉base和virtual要灵活运用,总之cpp这点很神奇,多态性

bskay 发表于 2016-08-19 14:54

private 只在编译时有用, 运行时无用;
换句话说
你提供一个.h 一个.obj
别人改了你的.h里面的private为public,引用你原来的私有函数
然后链接以前编译的obj,一样能正确运行的

感冒九十九 发表于 2016-10-25 14:24

这个应该会产生编译错误吧,访问权限没问题吗?

lxyscls 发表于 2016-10-25 15:58

virtual是运行时,private访问权限编译期就决定了
页: [1]
查看完整版本: C++ private virtual: