这样做是否合法(这只是头文件,而.cpp文件包含函数定义):
class Human
{
protected:
std::string m_name;
int m_age;
public:
Human();
void printName() const;
void printAge() const;
};
在派生类中重新定义相同的void printName() const;
(不是virtual
)。
class Student : public Human
{
public:
Student();
void printName() const;
void study() const;
};
这是什么?这不是压倒一切。但它也不会超载,对吗?至于重载应该有不同类型或数量的参数(方法在两个地方都是常量)。我在这做了什么?
答案 0 :(得分:0)
简单回答:是的。
更复杂的答案:是的,有一个标题:
Student s{};
s.printName(); // Will call Student::printName() const
Human &h = s;
h.printName(); // Will call Human::printName() const on same object
由于这些方法不是虚拟的,编译器将根据编译器在调用时看到的类型调用该方法。
printName()
中的Student
方法是一种覆盖。但它不是虚拟覆盖。