是一种在面向对象编程中常用的技术,用于将基类对象指针转换为派生类对象引用,以便可以访问派生类特有的成员和方法。 在C++中,可以使用dynamic_cast运算符来进行基类指针到派生类引用的强制转换...
楼主想要通过将基类指针转为派生类指针的方法来实现调用新方法.但他看到有论述说"不能够将基类指针转化为派生类指针(实际上如果此时的基类指向派生类对象的话,可以发生这种转换,我的批注)",故在论坛里对这一问题进行了交流.(我存在的疑惑:既然他可以使用子类来调用新方法,干嘛还要使用基类呢?)...
//program 14.8.1.cpp 基类和派生类指针互相转换 #include <iostream> using namespace std; class CBase { protected: int n; public: CBase(int i):n(i) { } //constructor_CBase void Print() { cout << "CBase:n=" << n << endl; }...
题目当将基类指针转换为派生类指针时,由于编译器认为这种操作是危险的,所以必须要使用___。相关知识点: 试题来源: 解析 当将基类指针转换为派生类指针时,由于编译器认为这种操作是危险的,所以必须要使用___. 强制类型转换反馈 收藏
1:基类中的成员函数被virtual关键字声明为虚函数; 2:派生类中该函数必须和基类中函数的名称、参数类型和个数等完全一致; 3:将派生类的对象赋给基类指针或者引用,实现多态。 函数覆盖(多态)实现了一种基类访问(不同)派生类的方法。我们把它称为基类的逆袭。 基类指针和派生类指针之间的转换 1. 基类指针指向基类...
派生类指针强转基类指针 向上转换简单无门槛,直接通过dynamic_cast转换,见代码示例。 基类指针强转派生类指针 向下转换要求基类得有虚函数,否则编译时会报cannot dynamic_cast ‘qa’ (of type ‘class A’) to type ‘class C’ (source type is not polymorphic) 错误,见代码示例。
这段代码不会通过编译。基类指针不能强制转换并赋给派生类指针,原因很简单,如果能够这样赋值,意味着基类完全可以替代派生类,这是不允许的,因为派生类可能有添加功能。如果现实中需要这种转换,那就首先需要考虑一下继承关系的设计问题了。
C++中也可以啊,用的是donamic_cast不就可以强制转换了么! 上面说的截断是不可能发生的,因为这是指针,是不会发生截断的。其实这就是C++的多态,基类指针指向派生类对象,这样就可以通过基类指针调用派生中重写的方法。 假如基类中有个display的虚函数,而且各个派生类中都重写 了该函数的话,只需...
dynamic_cast 是执行显式安全向下转换。只有当基类具有虚函数,且此时的基类指针具有正确的子类类型时,dynamic_cast才会返回正确的指针,否则返回0。安全性体现在这个地方,只能将基类指针向下转换为正确的子类类型。至于你用static_cast可以实现这个功能,是因为static_cast是执行强制转换,是一种不安全的转换...
dynamic_cast运算符,使得能够在类层次结构中进行向上转换,将派生类指针安全的转换为基类指针,确保可以安全的调用虚函数。其用法如下:BB是AA的派生类。若转换类型是传入指针的基类,则返回指向派生类对象的基类指针,否则返回空指针。 2.const_cast 为了便于叙述,这里不得不先区分一下常量指针和指针常量。