基类与派生类转换-对象赋值

Posted Linux编程学堂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基类与派生类转换-对象赋值相关的知识,希望对你有一定的参考价值。

3 基类与派生类的转换

3.1 对象赋值

我们先来看看一个简单的代码:

#include <iostream>

using namespace std;

int main(void)

double b = 123.456;

int a;

a = b;

cout << "a = " << a << endl;

return 1;

程序运行结果如下:

g++ test.cpp -o exe

wkf@ubuntu:~/c++$ ./exe

a = 123

可以看到,把一个double类型的变量b,赋给一个int类型的变量a。最终,变量a得到了变量b整形部分的数据。

那么,如果是派生类对象与基类对象之间的赋值,或导致什么结果?

学习了继承的知识,我们知道,派生类继承了基类,就拥有基类的一份代码。所以,派生类对象中拥有基类对象的一份代码。如果把一个派生类对象赋给基类对象,那么,基类对象获取到的是派生类中定义基类的那部分代码。程序测试例子如下:

程序运行结果如下:

可以看到,定义了student_new对象stud,然后,定义student对象s。可以直接把stud对象赋值给s对象。此时,s对象获取到stud对象中实现基类student对象的数据。所以,s对象输出的name等信息,就是stud对象设置基类student的name信息。

注意:在上面的测试例子中,student_new类从student继承,必须是public继承。否则,student_new从student类继承的数据无法在外部访问。那么,student_new从student继承过来的数据是私有信息,stud对象中的student信息无法赋给s对象。

在上面的例子中,看到stud对象销毁,调用析构函数的时候,输出name信息是异常。因为,stud对象赋值给s对象的时候,把stud.name赋值给s.name,那么,对象s消耗的时候,释放了s.name内存块,导致stud.name内存块也被释放。

所以,当stud对象销毁的时候,输出的stud.name内存块是异常的。

以上是关于基类与派生类转换-对象赋值的主要内容,如果未能解决你的问题,请参考以下文章

总结C++基类与派生类的赋值兼容规则

基类与派生类转换-指针赋值

C++的探索路12继承与派生之高级篇--派生类与赋值运算符及多重继承

Part7 继承与派生 7.3基类与派生类类型转换

<继承问题>可以把基类对象赋值给子类对象么?

继承