强制类型转换难道还改了对象 内存布局吗

来源:百度知道 编辑:UC知道 时间:2024/04/27 14:17:33
大家听听我讲的对不对好吗,定义一个指针指向基类对象,然后定义一个派生类指针并且将基类对象指针强制类型转换赋值给他,这是可以编译通过的,
可是我想啊,这样不是可以用这个派生类指针访问基类根本不存在的派生类对象自己增加的数据成员吗
到底强制类型转换做了什么,

不会 你说的意思我认为有点想错了
在简单来说 基类指针A和派生类指针B都指向同一个内存地址 又有什么呢?
通过
A按照基类结构来处理接下来大小为基类结构大小内存 通过B按照派生类结构来处理大小为派生类结构大小内存 这没什么嘛 只是说有些内存是不可预料的而已(未初始化 或者分配出去就会出现访问错误) 内存布局没发生变化 其实内存是什么 就是一个个字节而已 看你怎么去处理了 规则就是你指针类型

既然将积累指针赋值给了派生类指针,此时你的派生类指针实际上就是基类指针,而C++语言中“多态”部分规定类型转换以后是可以用基类指针访问派生类成员的,好好看看C++教材中相关章节就明白了。

没明白你所说的什么意思。派生类指针转换到基类指针是,是不需要强行转换的。而且如果有虚函数,这样做正是实现了“接口”的功能。

而把基类强制转换到派生类时,这样看它指向的对象事实上是个什么。如果他的确是个派生类对象,只是指针是基类型的,不会有任何错误,而且和上面哪种情况是一样的,实现“接口”的功能,但是,如果该对象事实上就是一个基类对象,只是编译能通过,但访问基类中不存在的数据成员时,会发生不可预料的错误,一般情况是会是访问违规。

伪代码例子:

Class 动物
{
public:
动物(){}
virtual ~动物(){}
public:
virtual void 叫声()
{
cout<<"没有叫声"<<endl;
}
};

class 猫 : public 动物
{
public:
猫() {}
virtual ~猫()
public:
virtual void 叫声()
{
cout<<"瞄~~"<<endl;
}
}

class 狗 : public 动物
{