C++继承-覆盖函数,包括使用“::”、.h文件和.CPP文件
我已经找遍了,找不到关于::操作符的任何资源 我有两个班:A班和B班。我还有一个C班 B继承自A,C继承自A A包含一个名为d的方法: A的.h文件: A的.cpp文件: 如果我有一个B或C,并且我运行了它们的d,那么如果B或C没有自己的被重写的d,那么应该运行这个方法 我想在B中覆盖d,但是我不清楚我是如何做到这一点的。我应该在B的.cpp文件中执行此操作吗 或 并在B的.h文件中声明C++继承-覆盖函数,包括使用“::”、.h文件和.CPP文件,c++,inheritance,virtual,header-files,C++,Inheritance,Virtual,Header Files,我已经找遍了,找不到关于::操作符的任何资源 我有两个班:A班和B班。我还有一个C班 B继承自A,C继承自A A包含一个名为d的方法: A的.h文件: A的.cpp文件: 如果我有一个B或C,并且我运行了它们的d,那么如果B或C没有自己的被重写的d,那么应该运行这个方法 我想在B中覆盖d,但是我不清楚我是如何做到这一点的。我应该在B的.cpp文件中执行此操作吗 或 并在B的.h文件中声明 还是函数应该是虚拟的?重写是虚拟成员函数的属性,也是类定义的一部分 示意图上,您需要: struct A {
还是函数应该是虚拟的?重写是虚拟成员函数的属性,也是类定义的一部分 示意图上,您需要:
struct A
{
virtual void d() { /* A's implementation */ }
};
struct B : A
{
void d() override { /* B's override of A::d */ }
};
struct C : A
{
}:
用法:假设您具有以下功能:
void g(A & a) { a.d(); }
然后:
如何将代码拆分为不同的文件与继承和重写无关。重写是虚拟成员函数的属性,也是类定义的一部分 示意图上,您需要:
struct A
{
virtual void d() { /* A's implementation */ }
};
struct B : A
{
void d() override { /* B's override of A::d */ }
};
struct C : A
{
}:
用法:假设您具有以下功能:
void g(A & a) { a.d(); }
然后:
如何将代码拆分为不同的文件与继承和重写无关。看来是时候好好地做一次了。将函数虚拟化。如果是抽象的,则将其设为私有虚拟。然后在子类中使用override关键字重写函数。在C++中,函数需要是虚拟的,没有像java那样的自动调用。@ 4386427:它是范围解析操作符。看起来是时候好了。让函数虚拟化。如果是抽象的,则将其设为私有虚拟。然后在子类中使用override关键字重写函数。在C++中,函数需要是虚拟的,没有像java那样的自动调用。@ 4386427:它是范围解析运算符。如果A:D没有标记为虚拟的,请考虑添加一些关于此行为如何改变的信息。如果A:D没有标记为虚拟的,请考虑添加一些关于此行为如何改变的信息。
struct A
{
virtual void d() { /* A's implementation */ }
};
struct B : A
{
void d() override { /* B's override of A::d */ }
};
struct C : A
{
}:
void g(A & a) { a.d(); }
B b;
g(b); // calls b's B::d
C c;
g(c); // calls c's A::d on the A-subobject of c