小古银的官方网站(完整教程):http://www.xiaoguyin.com/
C++入门教程视频:https://www.bilibili.com/video/av20868986/
目录
基类和派生类的裸指针转换
基础示例 1
#include <iostream> // std::cout std::endl
class base
{
public:
virtual ~base(void) = default;
};
class derived : public base
{
};
int main(void)
{
// 派生类对象
derived derivedobj;
std::cout << "派生类对象的地址是:" << &derivedobj << std::endl;
// 基类裸指针保存派生类对象的地址(隐式转换)
base *pointer1 = &derivedobj;
std::cout << "隐式转换后,基类裸指针保存的地址是:" << pointer1 << std::endl;
// 基类裸指针保存派生类对象的地址(static_cast转换)
base *pointer2 = static_cast<base *>(&derivedobj);
std::cout << "static_cast转换后,基类裸指针保存的地址是:" << pointer2 << std::endl;
// 用派生类裸指针保存基类裸指针的值(不能隐式转换)
// derived *pointer3 = pointer1; // 去掉开头注释将会编译报错
// 用派生类裸指针保存基类裸指针的值(dynamic_cast转换)
derived *pointer4 = dynamic_cast<derived *>(pointer1);
std::cout << "dynamic_cast转换后,派生类裸指针保存的地址是:" << pointer4 << std::endl;
// 用派生类裸指针保存基类裸指针的值(static_cast转换)
derived *pointer5 = static_cast<derived *>(pointer1);
std::cout << "static_cast转换后,派生类裸指针保存的地址是:" << pointer5 << std::endl;
return 0;
}
<