C++中的方法重写是否总是在派生类的标头中完成?

Is methods overriding in C++ always done in a derived class's header?

本文关键字:派生 重写 方法 是否 C++      更新时间:2023-10-16

对不起,我一直在学习c++一段时间,从Ivor Horton的《Visual c++》一书中我看到,当扩展一些类时,方法重写是在派生类的头文件中完成的。我还没有发现任何可以在.cpp文件中完成的示例。所以我的问题是,如果.cpp文件只能包含当前类的"本机"方法?还有一种方法可以重写父方法

方法重写基本上是为了实现多态行为,其中派生类重新实现适合其自己使用的基类方法。所以是的,通常方法在派生类中被重写。

顺便说一下,通常方法是在头文件中声明在源文件中定义,所以我不确定你到底是什么意思。

可能,你应该看看这个,
定义和声明的区别是什么?

我看到当扩展某些类时,方法重写是在派生类的头文件中完成的。

不是本质上。头文件是用来声明和实现源文件的。这并不重要,即使是多态方法或本机成员函数。

您可以随意使用。h和。cpp。可以在。h和。cpp中同时使用声明和定义。不是说你应该,但你可以。Cpp是由编译器编译的,如果你在Cpp中包含你的。h,它也会被编译。所以回答你的问题,是的,你可以在cpp中重写。

的例子:

A.h

class A{
public:
   A() {};//definition and declaration in header
   virtual void foo() {};
};

B.cpp

#include "A.h"
class B : public A{
public:
    B() {};//definition and declaration in source file
    virtual void foo() {};
};
int main()
{
    A* pA = new B;
    pA->foo(); //will call foo from B
    return 0;
}
然而,

B只在B.cpp中可见。别这么想!