当派生类指针指向基类对象时( ) A. 可以直接调用基类的成员函数 B. 可以调用派生类对象的成员函数 C. 必须强制将派生类指针转换成基类指针才能调用基类的成员函数 D. 以上说法都不对 相关知识点: 试题来源: 解析 C.必须强制将派生类指针转换成基类指针才能调用基类的成员函数 ...
我们有如下内存结构,派生类指针pB和基类指针pA都指向相同的位置,也就是数据c所在的位置。 如果基类有虚函数,也就是如下面代码所示的情况 #include <stdio.h> class A { public: char c; int i; virtual char getChar() const { return c; } }; class B: public A { public: int j; }; int main(...
当然,后面的话进行了强制转换,虽然可以编译成功,但实际上将派生类指针指向基类是不安全的。 因为基类中定义了 ToString()函数,直接通过ptr->ToString()调用是合法的,而在执行ptr->Area()时,虽然没有语法错误,严格来说会产生一个运行是错误 (不过执行时没有报错,不知道为啥)。 在调用 ToString()函数时,调用了基...
使用span传递数组而不是指针,也不要再放入span之前让数组名经过一次派生类向基类类型的转换。
使用span传递数组而不是指针,也不要再放入span之前让数组名经过一次派生类向基类类型的转换。 原文链接: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c151-use-make_shared-to-construct-objects-owned-by-shared_ptrs ...
下面是输出的结果,从结果可以看出派生类指针指向基类指针,指针地址会加4,基类指针指向派生类时,指针地址会减4。 base 200672 200676 derived base 200740 200744 Press any key to continue 下面我们看看派生类对象和基类对象的内存是如何组织的,我们在上例的基础上引入2个变量,代码如下: ...
基类对象能独立存在,也能作为派生类对象的一部分存在 Father* father = new Son(); //积累指针指向一个派生类对象 Father& q = *father; //基类引用绑定到派生类对象 Son son; Father* father = &son; //可以 Son* p_son = father; // 非法,编译器通过静态类型推断转换合法性,发现基类不能转成派生类...
关于基类和派生类的关系,___是错误的。 A. 派生类对象属于基类; B. 可以用派生类指针指向派生类对象; C. 可以将基类对象赋值给派生类对象; D. 派生类对象指针可转换为基类指针。 相关知识点: 试题来源: 解析 C.可以将基类对象赋值给派生类对象; 反馈 收藏 ...
首先,基类指针是一个指向基类对象的指针,而派生类是从基类派生出来的一个子类。在C++中,可以将基类指针指向派生类的对象,这种操作被称为“向上转型”。 以下是一个简单的示例,说明如何在目标c中将基类指针指向派生类: 代码语言:cpp 复制 #include<iostream> class Base { public: void print() { std::cout <...
在C++中,基类指针可以指向派生类对象的原因主要包括:多态性体现、内存布局兼容、类型安全和开闭原则。这种特性是C++支持面向对象编程(OOP)的一个关键方面,它允许使用基类类型的指针或引用来操作派生类对象,从而实现代码的通用性和可扩展性。 详细来说,多态性体现是这一特性的核心。多态性允许我们通过基类指针调用那些在...