调用子类函数
calling child class function
如何从指向子函数的父类型指针调用子函数?
class a{
public:
virtual void print(){cout << "From a" << endl;}
};
class b: public a{
public:
void print(){cout << "Form b" << endl;}
void printFunction(){cout << "Exist in b" << endl;}
};
int main() {
a* Obj = new b;
Obj->print();
Obj->printFunction();
return 0;
}
在这里,我有一个指向"b"的类型"a"的指针。我想调用仅在类 b 中定义的"printFunction"。
我收到此错误:
"类 A"没有名为"printFunction"的成员
问题是如何使用此指针调用"printFunction"?或者如何在这里应用铸造?
使用 dynamic_cast
:
class a{
public:
virtual ~a(){}
virtual void print(){ cout << "From a" << endl; }
};
class b: public a{
public:
void print(){ cout << "Form b" << endl; }
void printFunction(){ cout << "Exist in b" << endl; }
};
int main() {
a* Obj = new b;
Obj->print();
b* bObj = dynamic_cast<b*>(a);
if (bObj)
bObj->printFunction();
delete a;
return 0;
}
您可以使用
dynamic_cast转换进行向下转换
class base {
public:
void print() {std::cout << "base class print";}
};
class derived : public base {
public:
void printFunction() {std::cout << "derived class print";}
};
int main() {
base* ptr_derrived = new derived();
if(Derived* d = dynamic_cast<derived*>(ptr_derived) {
std::cout << "downcast successfuln";
d->printFunction(); // safe to call
}
delete ptr_derrived;
}
相关文章:
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 在c++类上调用void函数
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- C++/CLI System.AccessViolation在托管类中调用非托管函数时出现异常
- 使用基类指针调用基类的值构造函数的语法是什么?
- 为用户定义的类正确调用复制构造函数/赋值运算符
- 仅在可变模板类中调用现有函数
- 无法为类成员调用函数
- C++调用使用重写函数的父类函数
- 在具有向量的类构造函数中进行析构函数调用
- 计算对类函数的所有调用次数
- 检查类是否具有可能重载的函数调用运算符
- 从多重继承中的派生类函数调用适当的父类函数
- 在类函数调用期间丢失私有变量信息
- 从基类函数调用派生类函数
- 基类函数调用的替代设计模式
- 从派生类函数调用基函数
- 如何从基类函数调用重写虚函数
- C++:从非类函数调用类方法
- Windows内CreateThread类函数调用,指针引用崩溃