我有两个班 - 母亲(基地)和女儿(衍生)。我从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;
}
答案 0 :(得分:1)
但我的困惑是,即使我没有继承Mother类,该函数仍然有效,所以我如何继承/覆盖它?我很困惑,好像我真的在继承/覆盖任何东西。
你并没有真正覆盖你的Mother类的sayName(),因为(如你所说)女儿类首先没有继承它。也就是说,您需要先继承一个类才能覆盖其虚拟函数。
你对sayName()的第二次调用是有效的,因为它是对一个子类的成员函数的调用,它完全独立于Mother类。请注意,只有多个独立的类,其成员函数共享相同的签名不是覆盖
旁注:你不应该在Mother.cpp中包含Daughter.hpp,不管你是否计划继承母女。