【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout

这篇具有很好参考价值的文章主要介绍了【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

author:&Carlton

tag:C++

topic:【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout

website:黑马程序员C++

tool:Visual Studio 2019

date:2023年7月24日


 

目录

父类使用虚函数前后类内部结构变化

子类重写父类虚函数的作用及其机理


父类使用虚函数前后类内部结构变化

        首先父类成员函数speak没有使用virtual修饰,没有使用虚函数

        此时父类内部结构为空,大小为1字节

【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout,C++,暑期实践,c++

 

        使用virtual修饰后,即成员函数变为虚函数后

        父类内部结构多了一个虚函数指针(vfptr),大小为4字节

        虚函数指针指向虚函数表(vftable),虚函数表里存储的是父类Animal的虚函数speak()入口地址&Animal :: speak

 

【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout,C++,暑期实践,c++

程序源代码:               

#include <iostream>
using namespace std;

class Animal
{
public:
	 void speak()
	{
		cout << "动物在叫" << endl;
	}
};

class Cat :public Animal
{
public:
	void speak()
	{
		cout << "小猫在叫" << endl;
	}
};

class Dog :public Animal
{
public:
	void speak()
	{
		cout << "小狗在叫" << endl;
	}
};

void speak(Animal& animal)
{
	animal.speak();
}

void test01()
{
	Cat cat;
	speak(cat);
	Dog dog;
	speak(dog);
}

int main()
{
	test01();
	return 0;
}

子类重写父类虚函数的作用及其机理

        子类内部结构

        

        子类重写父类虚函数之前

        子类继承父类所有信息,包括虚函数指针,虚函数指针指向的是子类的虚函数表,但虚函数表里的信息继承父类的虚函数入口地址&Animal :: speak

【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout,C++,暑期实践,c++ 

        子类重写父类虚函数之后

        子类虚函数指针指向的虚函数表里的信息更新,子类重写函数入口地址&Cat :: speak覆盖父类虚函数入口地址

【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout,C++,暑期实践,c++

 

        因此,通过父类使用virtual修饰使用虚函数、以及使用父类指针定义或引用子类对象可以使用多态。

        编译器在运行阶段根据传入的子类对象相应地更新虚函数表信息(晚绑定,运行阶段确定函数地址),使用该子类对象的重写函数。

        运行结果:

【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout,C++,暑期实践,c++

 

欢迎指正与分享,谢谢!文章来源地址https://www.toymoban.com/news/detail-607653.html

到了这里,关于【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++类开发第七篇(详细说说多态和编译原理)

    多态性(polymorphism)提供接口与具体实现之间的另一层隔离,从而将”what”和”how”分离开来。多态性改善了代码的可读性和组织性,同时也使创建的程序具有可扩展性,项目不仅在最初创建时期可以扩展,而且当项目在需要有新的功能时也能扩展。 c++支持编译时多态(静态多

    2024年03月09日
    浏览(45)
  • Visual Studio 2017下的C++开发环境搭建

    Visual Studio 是Microsoft旗下的开发工具包系列产品,是一个基本完整的开发工具集,它包括整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等,是最流行的Windows平台应用程序的集成开发环境。 Visual Studio 适用于 Windows 上 .NET 和 C++ 开

    2024年02月13日
    浏览(49)
  • Windows搭建C++开发环境(visual studio 2022)

    开发环境的搭建 开发工具:vscode、visual studio 2022、visual studio 2019、2015、2010 .. 安装步骤(以Windows下visual studio2022为例): 打开官网地址  Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 (microsoft.com) 下载社区版2022   下载完成后打开 步骤如下 安装完成后会自动打开出现

    2024年02月06日
    浏览(44)
  • c++开发环境:Visual Studio的下载和安装

    Welcome to unique_Hang’s blog. 鲁迅说过:看unique_Hang博客的人颜值都很高! 打不开图片可以鼠标右键点击“复制图片地址”在新窗口中打开 作者邮箱:unique_hang@qq.com 喜欢的小伙伴可以关注我的b站账号(https://space.bilibili.com/290100464) 1 下载软件 官网:https://visualstudio.microsoft.com/ 选择

    2024年02月13日
    浏览(38)
  • C语言之开发工具:Visual Studio 2022安装教程

    一,C 语言 C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的。C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现。在 1978 年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)制作了 C 的第一个公开可用的描述

    2024年02月05日
    浏览(44)
  • 【教程】 .Net环境和开发工具Visual Studio的安装

    .NET 是一个免费的跨平台开放源代码开发人员平台,用于生成多种类型的应用程序。 .NET 基于许多大规模应用在生产中使用的高性能运行时构建而来。 Visual Studio IDE 是美国微软公司的开发工具包系列产品,简称为VS。VS是一个基本完整的开发工具集,它包括了整个软件生命周期

    2024年02月02日
    浏览(44)
  • Microsoft Visual Studio C++开发环境的配置及使用

    本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载,但需要注明原作者\\\"海洋饼干叔 叔\\\";本文不允许以纸质及电子出版为目的进行抄摘或改编。 1.《Python编程基础及应用》,陈波,刘慧君,高等教育出版社。免费授课视频 Python编程基础及应

    2024年02月04日
    浏览(67)
  • 使用 Visual Studio 2022 开发 Linux C++ 应用程序

    前置条件: Windows上需要先安装 WSL2,方法见: Install WSL | Microsoft Docs 在 WSL2 中依次执行如下命令,进行安装如下必需软件: Visual Studio 2022 引入了用于 Linux C++ 开发的本机 WSL2 工具集,可以构建和调试 Linux C++ 代码,并提供了非常好的 Linux 文件系统性能、GUI 支持和完整的系统

    2024年02月05日
    浏览(107)
  • C++教程(一)开发环境visual studio的安装——图文详细

    1、百度网盘 链接:https://pan.baidu.com/s/1QJosSoAT7EumuvyjtC_1Iw?pwd=wuqz  提取码:wuqz  2、官网下载 Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com) https://visualstudio.microsoft.com/zh-hans/ 第1步,将下载好的安装包,鼠标右击,选择解压。 2、解压后会得到一个安装文

    2024年02月13日
    浏览(40)
  • VTK开发环境配置(Visual Studio C++)-详细图文教程

    前言:由于目前网络上关于VTK的资料甚少,且绝大多数开发配置教程 在编译完VTK环境后仍然需要CMAKE来管理,每当为自己的项目配置vtk时都需要写CMAKE文件,这对没有CMAKE经验的人来说实在不友好。 故出此教程,完成VTK环境编译后,只需引入VTK相关的头文件目录,lib目录即可

    2023年04月12日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包