6.6 类与对象 【C++】

本文介绍了C++中dynamic_cast的使用,它用于尝试将对象从一个类型转换为另一个类型。文章通过示例展示了如何安全地进行类型转换,并探讨了动态类型转换的风险。同时,文章深入讨论了虚函数的概念,解释了虚函数在多态中的作用,以及虚函数表的工作原理,强调了虚函数在析构函数中的重要性。
摘要由CSDN通过智能技术生成

员工是人
人不一定是员工
————》 所以员工可以转为人;而 人 不可以转为员工

在这里插入图片描述

在这里插入图片描述
改为:
【dynamic_cast 是一个操作符 , 它的作用: 尝试着把 p 这个Person的类型转换成employee
它会去调查这个p所指向的对象是不是employee ,如果是,它会返回合法的指针/地址 ;如果不是,
则会返回 0 值,即NULL,空指针

Person.h
在这里插入图片描述
Person.cpp 不变
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
【结论: 答案是真的 p -> employee ,即可实现转化;
因为 main函数中,因为 p 是由e 这个 employee* 类型 转化成 Person*,
它只是指向开头而已,employee跟Person的指向 起始地址是一样的,只不过
类Person的属性(数据成员)地址分配完后,接着就给类employyee的属性(数据成员)
分配地址。
所以接下来函数中 将 p 这个原本是employee* , 后来是Person* 的 转化为 employee* ,是可以实现的

那我们来实现下 原本不是指向employy的 然后要转向employee, 看下能不能成功?

为了演示效果:这里我们直接新加一个类

在这里插入图片描述
在这里插入图片描述

【结论: 类型转换 建议用 dynamic_cast
最好不要用 强制类型转换,很危险。

在这里插入图片描述

所以我们建议用 dynamic_cast
但其实还是有其他风险:

在这里插入图片描述

在这里插入图片描述

因为其实本身 e是Employee,而 p 是引用 e
那我们怎么实现 p.speak()执行的是 Employee的speak函数呢?
多态:

在这里插入图片描述

// Demozqw.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>
#include <string>
#include "Employee.h"
#include <vector>  //向量  , 就像一个指针,容器, 数组一样
using namespace std;

class Shape {
       // 父类    形状
public:
 void draw() {
   
  cout << "Shape::draw()" << endl;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值