我有一个具有这种方法的基类:
class A{ virtual void func(int)=0 };
和继承的课程
class B :public A
{
//how should i write?
//a
virtual void func() { implementation...}
//b
void func() {implementation }
//my target is to redefine a function of ansestor
//i worry that variant b can cover ansestor function and i will not redefine it
//but what if i don't want that the function that was virtual in ansestor, will be virtual in subclass?
i'm confused
}
我不知道该怎么做。如果我不需要这个虚函数完成
答案 0 :(得分:4)
你问,“如果我不希望在ansestor中虚拟的函数在子类中是虚拟的,那该怎么办?”
很抱歉,但是在基类中声明为virtual
的每个函数在所有派生类中都是虚拟的。
在派生类声明中使用virtual
关键字实际上并不重要。选项a和b是相同的 - 在两种情况下B::func
都是虚拟的。
答案 1 :(得分:2)
我建议你写两个小程序,每个程序一个,以确定哪个适合你的需要。
答案 2 :(得分:1)
在C ++中,函数签名由函数名和函数参数组成。在一个类中,您不能拥有两个具有相同签名的函数。因此,您的第二个(非虚拟)函数声明将生成编译器错误。
简而言之:
virtual void func() { //implementation}
和
void func() { //implementation }
具有相同的签名,不能在同一个类中声明。
答案 3 :(得分:1)
虚拟意味着可以在继承的类中实现。无论继承的深度如何,虚函数总是虚拟的。