调用函数的childs版本而不是父母?

Cya*_*ime 8 c++ virtual inheritance overriding

好的,所以我上了两节课.

class a{
public:
a(){};
void print(){cout << "hello"};
}

class b : public a{
public:
void print(){cout << "hello world";}
}
Run Code Online (Sandbox Code Playgroud)

还有一群有孩子的父母

a blah[10];
blah[5] = b();
Run Code Online (Sandbox Code Playgroud)

比我打印,并希望它说你好世界.

blah[5].print();
Run Code Online (Sandbox Code Playgroud)

但它称之为父母.我该如何解决?

Roa*_*-EX 11

这可以通过声明函数virtual来修复,a:

class a{
public:
    virtual void print(){
        cout << "hello";
    }
}

class b : public a{
public:
    virtual void print() {
        cout << "hello world";
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是在C++中实现多态的方法.更多信息:http://en.wikipedia.org/wiki/Virtual_function

但是,应该注意的是,在您的示例中,它永远不会调用子函数,因为您使用的是对象,而不是对象的指针/引用.要解决这个问题,

a * blah[10];
blah[5] = new b();
Run Code Online (Sandbox Code Playgroud)

然后:

blah[5]->print();
Run Code Online (Sandbox Code Playgroud)