IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 多态重写类大小的问题 -> 正文阅读

[开发工具]多态重写类大小的问题

父类中只写一个虚函数

子类继承并重写虚函数

父类和子类的大小在vscode中输出为8,在visual stdio2019中大小输出为4

如果不写虚函数,两个编译器中的类大小都相当于空类,都是1

下图为vscode截图

在这里插入图片描述
下图为visual stdio2019截图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z5tt3JXS-1627354423317)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20210727104134306.png)]

打开visual stdio的命令提示查看内存,这里大小变成了8,为什么输出大小为4?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y8oLQOQg-1627354423318)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20210727104434490.png)]

在这里插入图片描述

下图为b站视频中visual stdio2017的截图,视频网址https://www.bilibili.com/video/BV1et411b73Z?p=136
在这里插入图片描述

代码如下:

/*
* Author:镖
* Description: 多态分为两类

静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名
动态多态: 派生类和虚函数实现运行时多态
静态多态和动态多态区别:

静态多态的函数地址早绑定 - 编译阶段确定函数地址
动态多态的函数地址晚绑定 - 运行阶段确定函数地址
* Date: Create in 2021-07-27 10:10:43
*/
#include "iostream" 
using namespace std;
//Speak函数就是虚函数
    //函数前面加上virtual关键字,变成虚函数,那么编译器在编译的时候就不能确定函数调用了。
class Animal
{
public:
    virtual void speak()
    {
        cout << "动物在说话" << endl;
    }
};
class Cat :public Animal
{
public:
    //重写:函数名、返回值、参数列表完全相同
    virtual void speak()//子类中的virtual可写可不写
    {
        cout << "Cat在说话" << endl;
    }
};
class Dog :public Animal
{
public:
    void speak()
    {
        cout << "Dog在说话" << endl;
    }

};
//我们希望传入什么对象,那么就调用什么对象的函数
//如果函数地址在编译阶段就能确定,那么静态联编
//如果函数地址在运行阶段才能确定,就是动态联编

void Dospeak(Animal& animal)
{
    animal.speak();
    cout << "当前类大小" << sizeof(animal) << endl;
}
//多态满足条件: 
//1、有继承关系
//2、子类重写父类中的虚函数
//多态使用:
//父类指针或引用指向子类对象

void test()
{
    Animal animal;
    Dospeak(animal);
    Cat cat;
    Dospeak(cat);
    Dog dog;
    Dospeak(dog);
}
int main()
{
    test();



    system("pause");
    return 0;
}
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 13:28:45  更:2021-07-28 13:28:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:48:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码