潜水一厮 发表于 2017-01-05 14:45

shang2010 发表于 2017-01-05 16:00

虚函数又不是真函数,虚函数的定义都是没有意义的,虚函数的存在只是为了继承扩展新属性

windoze 发表于 2017-01-05 16:07

http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4252426&page=1#pid24591502

lxyscls 发表于 2017-01-05 17:03

windoze 发表于 2017-01-05 16:07
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4252426&page=1#pid24591502

我赶脚这两个问题还是不太一样勒,这个是Base public, Derived private,当然virtual和访问控制没关系就是了。也就是访问控制编译时检查了Base *就完事了?

#include <iostream>

using namespace std;

class Base {
    public:
      virtual void func(void) { cout << "Base" << endl; }
};

class Derived : public Base {
    private:
      void func(void) { cout << "Derived" << endl; }
};

int main(void) {
    Base *b = new Derived();
    b->func();

    return 0;
}


shang2010 发表于 2017-01-05 21:41

我好像很久没有写代码了,哈哈

shang2010 发表于 2017-01-05 21:43

反正cpp的东西,你用多了无非两个结果,要么成为神经病,要么就是大牛

windoze 发表于 2017-01-05 23:58

回复 4# lxyscls

其实是一样的,virtual表示这个方法可以被子类覆盖,public/private标明访问权限。在一个类中声明为public的方法,外部代码可以通过该类的指针/引用直接访问,在子类中重新声明为private说明外部代码通过子类指针/引用不能直接访问。

总之这两个东西没有关系就对了。
页: [1]
查看完整版本: 这个属性算是编译器的bug吗。