楼主想要通过将基类指针转为派生类指针的方法来实现调用新方法.但他看到有论述说"不能够将基类指针转化为派生类指针(实际上如果此时的基类指向派生类对象的话,可以发生这种转换,我的批注)",故在论坛里对这一问题进行了交流.(我存在的疑惑:既然他可以使用子类来调用新方法,干嘛还要使用基类呢?)...
题目当将基类指针转换为派生类指针时,由于编译器认为这种操作是危险的,所以必须要使用___。相关知识点: 试题来源: 解析 当将基类指针转换为派生类指针时,由于编译器认为这种操作是危险的,所以必须要使用___. 强制类型转换反馈 收藏
/*基类指针 pbase指向派生类对象 objderived,这是合法的。虽然执行完此 行语句后, pbase指向的是派生类对象,尽管基类和派生类都有 Print()成员函数,而且 pbase指向的是派生类对象,本行依然执行的是 基类的 Print()成员函数,产生第一行输出。 编译器看到的是哪个类的指针,那么就会认为通...
是一种在面向对象编程中常用的技术,用于将基类对象指针转换为派生类对象引用,以便可以访问派生类特有的成员和方法。 在C++中,可以使用dynamic_cast运算符来进行基类指针到派生类引用的强制转换...
//CDerived * pDerived = & objBase; //错,不能将基类指针赋值给派生类指针 CDerived*pDerived=(CDerived*)(&objBase);/*基类的兼容性比其派生类要强;派生类(做作值时)就只能接受派生类,基类作左值是既能够接受基类,也能够接受派生类;如过使用强制类型转换,将基类强制转换派生类,从结果上看,"基类间接赋值给...
1. 基类指针指向基类对象、派生类指针指向派生类对象 这种情况是常用的,只需要通过对应类的指针直接调用对应类的功能就可以了。 #include<iostream> using namespace std; class Father public: void print() printf("Father's function!"); ; class Son:public Father ...
派生类指针强转基类指针 向上转换简单无门槛,直接通过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是执行强制转换,是一种不安全的转换...