在基类中调用派生类方法
Calling derived class method in base class
我们可以在派生类中调用"基类方法"。但是我们可以在基类函数中调用派生类方法吗?
#include<iostream.h>
class base {
public:
void print()
{
cout<<"base class";
}
};
class derived : public base
{
public:
void print()
{
cout<<"derived class";
}
};
如何在基类中调用这个派生类print()
函数?
不能从基类调用派生类中定义的普通方法。你所能做的是在基类中添加一个virtual
(可能是纯)方法,在派生类中提供实现。你可以从base.
class Base{
public:
virtual void foo(){cout<<"Hello";};
void bar() { foo();}
};
class Derived: public Base{
public:
void foo() override{ cout<<"Hi";}
};
int main() {
Base* b1 = new Derived();
b1->bar(); //will call Derived::foo()
Base* b2=new Base();
b2->bar(); // will call Base::foo()
}
可以在派生类对象的基类方法中调用派生类的方法,如果它是虚方法:
class base {
public:
void doSomething() {
print();
}
virtual void print() {
cout<<"base class";
}
};
class derived : public base {
public:
virtual void print() {
cout<<"derived class";
}
};
int main() {
derived d;
base* pb = &d;
pb->doSomething();
}
如果您确定base
的所有实例化将作为derived
的基类(可能是在使用好奇循环模板模式的情况下),您可以简单地将static_cast
this
到derived*
:
#include <iostream>
class base {
public:
void call_derived_print();
void print()
{
std::cout<<"base class";
}
};
class derived : public base
{
public:
void print()
{
std::cout<<"derived class";
}
};
void base::call_derived_print() {
//undefined behaviour unless the most-derived type of `*this`
//is `derived` or is a subtype of `derived`.
static_cast<derived*>(this)->print();
}
相关文章:
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 从基类实例调用派生类方法而不进行强制转换
- C++ 使用派生类方法更改基类数据成员
- 将派生类方法与基类unique_ptr一起使用
- 使用派生类C++方法的超类
- 从库类扩展,然后如何让库调用派生类方法
- 当应该调用派生类方法时,为什么要调用基类方法
- 抽象类的需求是什么?为什么要通过其基类访问派生类方法?在C++
- 如何轻松地将 Base 方法重定向到相同的派生类方法
- Gmock Base类方法中的派生类方法
- 如何调用精确派生类方法?
- 为什么可以从实例化基类对象的投射指针调用非静态派生类方法
- C++使用基类指针访问派生类方法
- 调用派生类方法时出现分段错误
- 从基类析构函数调用派生类方法
- 基类的指针数组:如何调用唯一的派生类方法
- 派生类方法的默认参数的最佳实践
- 从基类实例调用派生类方法
- C++ 继承:指向基类的派生类指针调用派生类方法
- 虚函数未解析为大多数派生类方法