如何在 C++ 中调用在抽象基 class 和派生 class 中都有定义的基 class 的虚函数定义?
How can I call virtual function definition of base class that have definitions in both abstract base class and derived class in C++?
我们不能创建一个抽象的对象class,对吧?那么如何调用在抽象基 class 和派生 class 中都有定义的虚函数呢?我想在抽象基础 class 中执行代码,但目前,我正在使用派生 class 的对象。
class T
{
public:
virtual int f1()=0;
virtual int f2() { a = 5; return a }
}
class DT : public T
{
public:
int f1() { return 10; }
int f2() { return 4; }
}
int main()
{
T *t;
t = new DT();
............
}
有什么方法可以使用对象 t 调用基础 class 函数吗?如果不可以,我需要做什么来调用基础class函数?
您可以在调用函数时明确指定 class 作用域:
class A { /* Abstract class */ };
class B : public A {}
B b;
b.A::foo();
就像调用任何其他基础 class 实现一样:使用显式限定来绕过动态调度机制。
struct AbstractBase
{
virtual void abstract() = 0;
virtual bool concrete() { return false; }
};
struct Derived : AbstractBase
{
void abstract() override {}
bool concrete() override { return true; }
};
int main()
{
// Use through object:
Derived d;
bool b = d.AbstractBase::concrete();
assert(!b);
// Use through pointer:
AbstractBase *a = new Derived();
b = a->AbstractBase::concrete();
assert(!b);
}
如果抽象基class有一些代码,那么就调用BaseClassName::AbstractFunction()
class Base
{
virtual void Function() {}
}
class Derived : Base
{
virtual void Function() { Base::Function(); }
}
我们不能创建一个抽象的对象class,对吧?那么如何调用在抽象基 class 和派生 class 中都有定义的虚函数呢?我想在抽象基础 class 中执行代码,但目前,我正在使用派生 class 的对象。
class T
{
public:
virtual int f1()=0;
virtual int f2() { a = 5; return a }
}
class DT : public T
{
public:
int f1() { return 10; }
int f2() { return 4; }
}
int main()
{
T *t;
t = new DT();
............
}
有什么方法可以使用对象 t 调用基础 class 函数吗?如果不可以,我需要做什么来调用基础class函数?
您可以在调用函数时明确指定 class 作用域:
class A { /* Abstract class */ };
class B : public A {}
B b;
b.A::foo();
就像调用任何其他基础 class 实现一样:使用显式限定来绕过动态调度机制。
struct AbstractBase
{
virtual void abstract() = 0;
virtual bool concrete() { return false; }
};
struct Derived : AbstractBase
{
void abstract() override {}
bool concrete() override { return true; }
};
int main()
{
// Use through object:
Derived d;
bool b = d.AbstractBase::concrete();
assert(!b);
// Use through pointer:
AbstractBase *a = new Derived();
b = a->AbstractBase::concrete();
assert(!b);
}
如果抽象基class有一些代码,那么就调用BaseClassName::AbstractFunction()
class Base
{
virtual void Function() {}
}
class Derived : Base
{
virtual void Function() { Base::Function(); }
}