C++ 子类中的编辑功能

C++ 子类中的编辑功能,c++,inheritance,polymorphism,C++,Inheritance,Polymorphism,我想编辑继承的函数name(),并确保继承的函数info()在被child的实例调用时将调用child::name(),而不是parent::name() class parent { public: string name() { return "parent"; } void info() { cout << "This class is " << name() << endl; } }; class child

我想编辑继承的函数
name()
,并确保继承的函数
info()
在被
child
的实例调用时将调用
child::name()
,而不是
parent::name()

class parent {
public:
    string name() { return "parent"; }

    void info() {
        cout << "This class is " << name() << endl;
    }
};

class child : public parent {
public:
    string name() { return "child"; }
};

int main() {
    parent p;
    child c;
    p.info(); // outputs "parent"
    c.info(); // outputs "parent" - I want "child"
}
类父类{
公众:
字符串名(){返回“父”;}
无效信息(){
你能声明一个非多态函数吗
如果父函数的成员函数
f()
不是
virtual
,则它不是多态函数。因此,如果父函数的另一个函数调用此函数,则将调用的是
parent::f()

如果此函数被子函数中具有完全相同签名的另一个函数
f()
隐藏,并且如果此函数被子函数的另一个函数调用,则将调用的是
child::f()

有趣的是,如果您直接为一个对象调用函数,那么将调用该对象的声明类型的函数

多态函数 如果要使函数具有多态性,则必须在父对象中将其定义为
virtual
。假设它在子对象中被重写。在这种情况下,当调用
f()
时,它将始终是为对象的真实类型定义的
f()

class parent {
public:
    virtual string name() { return "parent"; }

    ...
    }
};

class child : public parent {
public:
    string name() override { return "child"; }
};
使用此程序,您将获得以下结果:

This class is parent
This class is child
您已经声明了一个非多态函数 如果父函数的成员函数
f()
不是
virtual
,则它不是多态函数。因此,如果父函数的另一个函数调用此函数,则将调用的是
parent::f()

如果此函数被子函数中具有完全相同签名的另一个函数
f()
隐藏,并且如果此函数被子函数的另一个函数调用,则将调用的是
child::f()

有趣的是,如果您直接为一个对象调用函数,那么将调用该对象的声明类型的函数

多态函数 如果要使函数具有多态性,则必须在父对象中将其定义为
virtual
。假设它在子对象中被重写。在这种情况下,当调用
f()
时,它将始终是为对象的真实类型定义的
f()

class parent {
public:
    virtual string name() { return "parent"; }

    ...
    }
};

class child : public parent {
public:
    string name() override { return "child"; }
};
使用此程序,您将获得以下结果:

This class is parent
This class is child
parent::name()