场景:
1. C++的对象区别于C的原因是他们可以有继承关系, 方法有重载, 覆盖关系等, 他们的对象内存数据结构因此也比较复杂.
2. 很多情况下我们需要一个父类来存储子类的指针对象进行通用方法的操作,涉及到具体某个子类对象特定操作时又需要强制转换为子类,那么这时候该用什么好呢?
答: 如果不需要类型检查的话就直接用C的强制转换即可(B*)c. 但是C++ 之父并不推荐使用C的强制类型转换;
原因1是没有编译器检查.
原因2是对象指针在子类父类之间转换时所对应的地址值可能会变化, 这样用C的转换会有误导的可能在那里.
看例子和注释说明吧:
test.cpp
#include <iostream>
class A
{
public:
A(){}
~A(){}
int i;
int j1;
void Test(){ std::cout << "TestA" << std::endl;}
/* data */
};
class C
{
public:
C(){}
~C(){}
int j;
void Test(){ std::cout << "TestC" << std::endl;}
/* data */
};
class B : public A,public C
{
public:
B(){}
~B(){}
void Test(){ std::cout << "TestB" << std::endl