派生 class 命名中的虚函数
virtual function in derived class naming
我正在尝试确定如何在派生 class 中命名我的虚函数。
Base.h
class Base
{
public:
virtual void Virtual() = 0;
};
Derived.h
class Derived : public Base {
public:
void Virtual();
};
Derived.cpp
Derived::Virtual() // or Base::Virtual
{
cout << "Derived Virtual.\n";
}
我是在实现文件中使用 Derived::Virtual 还是 Base::Virtual,无论哪种方式都有什么问题?
这取决于你想要达到什么。
Derived::Virtual
将定义重写函数,而 Base::Virtual
将定义基础 class 函数。两者都可以做到。前者不能跳过定义,即Derived::Virtual
,因为它不是纯虚的,一旦在你没有定义的情况下被调用,就会出现链接错误。
定义 Base::Virtual
以提供一些通用行为,然后通过像这样完全限定它来调用该函数而不使用虚拟分派是有意义的:
void Derived::Virtual() {
Base::Virtual();
std::cout << Derived::Virtual() < "\n";
}
参考C++ pure virtual function have body and Does it make any sense to define "pure" virtual functions in the base class itself?。
我正在尝试确定如何在派生 class 中命名我的虚函数。
Base.h
class Base
{
public:
virtual void Virtual() = 0;
};
Derived.h
class Derived : public Base {
public:
void Virtual();
};
Derived.cpp
Derived::Virtual() // or Base::Virtual
{
cout << "Derived Virtual.\n";
}
我是在实现文件中使用 Derived::Virtual 还是 Base::Virtual,无论哪种方式都有什么问题?
这取决于你想要达到什么。
Derived::Virtual
将定义重写函数,而 Base::Virtual
将定义基础 class 函数。两者都可以做到。前者不能跳过定义,即Derived::Virtual
,因为它不是纯虚的,一旦在你没有定义的情况下被调用,就会出现链接错误。
定义 Base::Virtual
以提供一些通用行为,然后通过像这样完全限定它来调用该函数而不使用虚拟分派是有意义的:
void Derived::Virtual() {
Base::Virtual();
std::cout << Derived::Virtual() < "\n";
}
参考C++ pure virtual function have body and Does it make any sense to define "pure" virtual functions in the base class itself?。