如何从父指针调用子方法
How to call child method from a parent pointer?
我有一个基类和一个扩展它的子类。子类拥有父类所没有的自己的方法。也就是说,在基类中将其声明为virtual实际上并不是一种选择。
class A {
public:
virtual void helloWorld();
};
class B : public A {
public:
virtual void helloWorld();
void myNewMethod();
};
然后,在我的实现中,我有一个指向a的指针,我把它构造为B:
// somewhere in a .cpp file
A* x;
x = new B();
x->myNewMethod(); // doesn't work
我当前的解决方案是强制转换它:
((B *)x)->myNewMethod();
我的问题是,是否有一种更干净的方法来做到这一点,或者是铸造的方式?
在这种情况下,运行时强制转换似乎没有问题。但是,比起c风格的强制转换,您应该使用我的问题是,是否有一种更干净的方法来做到这一点,或者是铸造的方式?
dynamic_cast<>
(如果您不确定x
是否实际上指向B
类型的对象):
B* pB = dynamic_cast<B*>(x); // This will return nullptr if x does not point
// to an object of type B
if (pB != nullptr)
{
pB->myNewMethod();
}
另一方面,如果您确定x
指向B
类型的对象,那么您应该使用static_cast<>
:
B* pB = static_cast<B*>(x);
pB->myNewMethod();
A
没有定义任何称为myNewMethod()
的方法,因此不能调用它。
尽管我通常强烈反对使用强制类型转换,但这里强制类型转换确实是唯一的方法
好吧,你必须进行强制转换,但是你可以通过在函数中隐藏难看的强制转换语法来使代码看起来更干净/更可读。
B* B_static_cast(A* item)
{
return static_cast<B*>(item);
}
A* item = new B();
B_static_cast(item)->funtion_in_B();
相关文章:
- 将方法转换为调用该方法的成员函子对象会导致崩溃
- 有没有办法从同一类中的函子调用类方法?
- C++ 在不知道子类型的情况下从父类型调用子方法
- C++继承,如何在基类的方法中调用子类的方法?
- 从父方法调用子方法
- 如何将子方法调用到父方法
- 基类中的虚拟方法和子类中的非 Virtula 方法.仍然如何调用子类方法,即使它是非虚拟的
- C ,基础课程如何将子类作为成员包含并调用其方法
- 继承和重写 - 从基类调用重写子方法
- 调用子类方法会导致分段错误
- C++:从父实例化调用子方法
- 在C++中,如何从父类变量的子类调用重载方法
- 继承基类,定义基类的原型方法,但从第三个对象调用子类的方法
- 正在调用子方法
- C++类继承从基类型调用子方法
- C++从父引用调用子方法
- 如何从父指针调用子方法
- 从没有虚拟或引用的基方法调用子方法
- 父对象调用子方法C++
- c++中从父析构函数调用子方法