如何在继承时覆盖派生类中的函数

时间:2016-09-25 02:25:41

标签: c++

我有两个班 - 母亲(基地)和女儿(衍生)。我从Mother类继承一个函数,并试图在Daughter类中重写。它看起来像是覆盖了,但我的困惑是,即使我没有继承Mother类,该函数仍然有效,所以我如何继承/覆盖它?我很困惑,好像我真的继承/重写任何东西。请在Derived类中注明我没有继承: public Mother 感谢您的帮助,一如既往!

这是我的代码

Mother.hpp

#ifndef Mother_hpp
#define Mother_hpp

#include <iostream>
#include <string>


class Mother
{
public:
    Mother();

    void sayName();

    };

Mother.cpp

#include <iostream>
#include <string>
#include "Mother.hpp"
#include "Daughter.hpp"
using namespace std;

Mother::Mother(){}

void Mother::sayName(){
    cout<<"I am Sandy" <<endl;
}

Daughter.hpp

#ifndef Daughter_hpp
#define Daughter_hpp

#include <iostream>
#include "Mother.hpp"

class Daughter : public Mother
{
public:
    Daughter();

    void sayName();
};

Daughter.cpp

#include <iostream>
#include "Mother.hpp"
#include "Daughter.hpp"
using namespace std;

Daughter::Daughter() : Mother(){}

void Daughter::sayName(){
    cout << "my name is sarah" <<endl;
}

Main.cpp的

#include <iostream>
#include "Mother.hpp"
#include "Daughter.hpp"
using namespace std;

int main(int argc, const char * argv[]) {
    Mother mom;
    mom.sayName();

    Daughter d;
    d.sayName();

    return 0;
}

1 个答案:

答案 0 :(得分:1)

  

但我的困惑是,即使我没有继承Mother类,该函数仍然有效,所以我如何继承/覆盖它?我很困惑,好像我真的在继承/覆盖任何东西。

  • 你并没有真正覆盖你的Mother类的sayName(),因为(如你所说)女儿类首先没有继承它。也就是说,您需要先继承一个类才能覆盖虚拟函数。

  • 你对sayName()的第二次调用是有效的,因为它是对一个子类的成员函数的调用,它完全独立于Mother类。请注意,只有多个独立的类,其成员函数共享相同的签名不是覆盖

  • 旁注:你不应该在Mother.cpp中包含Daughter.hpp,不管你是否计划继承母女。