C++零碎记录(十)

news2024/10/7 20:34:47

17. 继承对象内存

17.1 查询继承对象所占内存

#include <iostream>
using namespace std;
#include<string>

//继承中的对象模型

class Base
{
public:
    int m_A;
protected:
    int m_B;
private:
    int m_C;
};


//公共继承
class Son:public Base
{
    int m_D; 
};

//利用开发人员命令提示工具查看对象模型
//跳转盘符→F:
//跳转文件路径→cd 具体路径下
//查看命令
//cl /d1 reportSingleClassLayout查看的类名 "文件名"

void test01()
{
    //父类中所有非静态成员属性都会被子类继承下去
    //父类中私有成员属性 是被编译器给隐藏了,因此是访问不到,但是确实被继承下去了
    cout << "size of Son =" << sizeof(Son) << endl;  //16个字节,父类3个int一个12个字节,字节1个int4个字节                        
}

int main()
{
    test01();

    system("pause");

    return 0;

}

运行结果:

  • size of Son =16
  • 请按任意键继续. . .

17.2 VS自带开发工具查询

① 首先打开visio studio的开发人员命令工具,如下图所示。

② 查询visio studio的项目所在地址。

③ "输入跳转盘符,例如,C:"->"输入项目所在地的地址"->"输入dir(查询项目中文件信息)"

④ 输入:cl(空格)/d1 reportSingleClassLayout查看的类名 "文件名",可以查看类所占内存空间大小。

18. 继承构造和析构顺序

① 继承中,先调用父类构造函数,再调用子类构造函数,析构顺序与构造顺序相反,先调用子类析构函数,再调用父类析构函数。

#include <iostream>
using namespace std;
#include<string>

//继承中的构造和析构顺序

class Base
{
public:
    Base()
    {
        cout << "Base构造函数!" << endl;
    }

    ~Base()
    {
        cout << "Base析构函数!" << endl;
    }
};


//
class Son:public Base
{
public:
    Son()
    {
        cout << "Son构造函数!" << endl;
    }

    ~Son()
    {
        cout << "Son析构函数!" << endl;
    }
};


void test01()
{
    //Base b;  //创建父类对象只有父类的构造函数、析构函数

    //继承中的构造和析构顺序如下:
    //先构造父类、再构造子类,析构的顺序与构造的顺序相反
    Son s;
}


int main()
{
    test01();

    system("pause");

    return 0;

}

运行结果:

  • Base构造函数!
  • Son构造函数!
  • Son析构函数!
  • Base析构函数!
  • 请按任意键继续. . .

19. 同名成员处理

① 子类对象可以直接访问到子类中同名成员。

② 子类对象加作用域可以访问到父类同名成员。

③ 当子类与父类拥有同名的成员函数,子类会隐藏父类中所有同名成员函数(有参、无参),加作用域才可以访问到父类中同名函数。

#include <iostream>
using namespace std;
#include<string>


//继承中同名成员处理

class Base
{
public:
    Base()
    {
        m_A = 100;
    }
    int m_A;
    
    void func()
    {
        cout << "Base - func()调用" << endl;
    }

    void func(int a)
    {
        cout << "Base - func(int a)调用" << endl;
    }
};

class Son:public Base
{
public:
    Son()
    {
        m_A = 200;
    }

    void func()
    {
        cout << "Son - func()调用" << endl;
    }

    int m_A;
};

//同名成员属性处理方式
void test01()
{
    Son s;
    cout << "Son 下 m_A=" << s.m_A << endl;
    //如果通过子类对象访问到父类中同名成员,需要加作用域
    cout << "Base 下 m_A=" << s.Base::m_A << endl;  

}

//同名成员函数处理方式
void test02()
{
    Son s;
    s.func(); //直接调用 调用时子类中的同名成员

    //调用父类中同名成员函数
    s.Base::func();

    //如果子类中出现和父类同名的成员函数,子类的同名成员会隐藏掉父类中所有同名成员函数
    //如果想访问到父类中被隐藏的同名成员函数,需要加作用域
    s.Base::func(100);
}

//同名成员函数处理
int main()
{
    test01();
    test02();
    
    system("pause");

    return 0;

}

运行结果:

  • Son 下 m_A=200
  • Base 下 m_A=100
  • Son - func()调用
  • Base - func()调用
  • Base - func(int a)调用
  • 请按任意键继续. . .

链接:https://www.zhihu.com/question/437657370/answer/1692846096
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1001502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在Creo 6.0中画图模板问题

在Creo 6.0中&#xff0c;文件的默认模板是英制模板“inlbs_part_solid”,此文件模板中尺寸的单位是inch。我们建模中需要的单位是mm&#xff0c;改变Creo文件默认的单位有两种方法。 1 【新建】对话框取消勾选【使用默认模板】对话框 &#xff08;1&#xff09;单击主页选项…

从板凳围观到玩转行家:Moonbeam投票委托如何让普通用户一同参与

今年5月&#xff0c;Moonbeam发起了一项社区链上治理中投票委托反馈的调查。187位社区成员参与了这项调查&#xff0c;调查发现受访者对治理感兴趣&#xff0c;增加参与度只需要进行一些调整&#xff0c;即更简化的投票流程。 治理和去中心化是Web3的核心&#xff0c;随着Moon…

2023/9/11 qtc++

#include <iostream> #include <cstring> using namespace std; class myString { private:char *str;int size; public://无参构造myString():size(10){str new char[size]; //构造出一个长度为10的字符串strcpy(str,""); //赋值为空串}//有…

@ApiImplicitParams这个注解的作用

ApiImplicitParams这个注解的作用&#xff1f; ApiImplicitParams是一个用于描述方法参数的注解&#xff0c;它可以用在方法上&#xff0c;作用是为方法中的参数定义多个注解&#xff0c;并将这些注解集中到一个注解集中进行统一管理。通过ApiImplicitParams注解&#xff0c;我…

玩石头游戏的必胜策略-2023年全国青少年信息素养大赛Python复赛真题精选

[导读]&#xff1a;超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲&#xff0c;这是超平老师解读Python编程挑战赛真题系列的第17讲。 全国青少年信息素养大赛&#xff08;原全国青少年电子信息智能创新大赛&#xff09;是“世界机器人大会青少年机器人设…

Linux 操作系统云服务器安装部署 Tomcat 服务器详细教程

Tomcat 基本概述 Tomcat 服务器是Apache软件基金会&#xff08;Apache Software Foundation&#xff09;的 Jakarta 项目中的一个核心项目&#xff0c;由 Apache、Sun 和其他一些公司及个人共同开发而成。它是一个免费的开放源代码的 Web 应用服务器&#xff0c;属于轻量级应用…

融资融券开户条件和要求,融资融券开户具体流程

融资融券开户条件和要求&#xff1a;符合国家法律、行政法规规定&#xff0c;允许从事证券交易的个人和机构&#xff0c;个人客户需年满18周岁且具有完全民事行为能力&#xff0c;要求普通证券账户在公司从事证券交易不少于6个月&#xff0c;即开户需满6个月&#xff1b;拥有不…

【C++进阶】二叉树搜索树

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C进阶 ⭐代码仓库&#xff1a;C进阶 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

十三、函数式编程(2)

本章概要 方法引用 Runnable 接口未绑定的方法引用构造函数引用 函数式接口 多参数函数式接口缺少基本类型的函数 方法引用 Java 8 方法引用没有历史包袱。方法引用组成&#xff1a;类名或对象名&#xff0c;后面跟 :: &#xff0c;然后跟方法名称。 interface Callable {…

系统架构设计师-计算机网络

目录 一、计算机网络技术概述 1、网络概述 2、网络有关指标 3、网络分类 4、5G技术 二、组网技术 1、交换技术 2、基本交换原理 三、TCP/IP协议簇 1、DHCP 2、DNS 四、网络规划与设计 一、计算机网络技术概述 1、网络概述 计算机网络的功能&#xff1a; &#xff08;1&…

项目经理升级却面临挑战?如何解决任务分解和成员职责不明难题

有一个朋友刚升任项目经理。但他这两天却一副愁眉不展的样子&#xff0c;因为他之前是做技术的&#xff0c;缺乏管理经验&#xff0c;在制定计划时没有合理的分解任务&#xff0c;并且没有明确项目成员的职责&#xff0c;导致项目在推进过程中项目进度不清晰。 项目管理涉及到…

Mendeley在linux中无法打开APPimage

原因:FUSE 库为用户空间程序提供了一个接口&#xff0c;可以将虚拟文件系统导出到 Linux 内核。由于缺少这个关键库&#xff0c;AppImage 无法按预期工作。 1 安装fuse,打开终端,输入命令 sudo apt install libfuse2 输入用户密码结,果如下 2 确保APPimage作为程序运行 右击…

在阿里云 linux 服务器上查看当前服务器的Nginx配置信息

我们可以通过命令 sudo nginx -t查看到nginx.conf的路径 可以通过 sudo nginx -T查看 nginx 详细配置信息&#xff0c;包括加载的配置文件和配置块的内容 其中也会包括配置文件的内容

【k8s】Kubernetes版本v1.17.3 kubesphere 3.1.1 默认用户登录失败

1.发帖&#xff1a; Kubernetes版本v1.17.3 kubesphere 3.11 默认用户登录失败 - KubeSphere 开发者社区 2. 问题日志&#xff1a; 2.1问题排查方法 &#xff1a; 用户无法登录 http://192.168.56.100:30880/ 2.2查看用户状态 kubectl get users [rootk8s-node1 ~]# k…

Java 多线程系列Ⅶ(线程安全集合类)

线程安全集合类 前言一、多线程使用线性表二、多线程使用栈和队列三、多线程下使用哈希表 前言 在数据结构中&#xff0c;我们学习过 Java 的内置集合&#xff0c;但是我们知道&#xff0c;我们学过的大多数集合类都是线程不安全的&#xff0c;少数如 Vector&#xff0c;Stack…

Fastjson_1.2.24_unserialize_rce漏洞复现

fastjson_1.2.24_unserialize_rce 说明内容漏洞编号CNVD-2017-02833漏洞名称FastJson < 1.2.24 远程代码执行漏洞评级高危影响范围1.2.24漏洞描述通过parseObject/parse将传入的字符串反序列化为Java对象时由于没有进行合理检查修复方案升级组件&#xff0c;打补丁&#xf…

PWmat计算再发Science:用于甲烷热解高效制氢的三元镍钼铋液态合金催化剂

文章信息 原标题: Ternary NiMo-Bi liquid alloy catalyst for efficient hydrogen production from methane pyrolysis 中文标题&#xff1a;用于甲烷热解高效制氢的三元镍钼铋液态合金催化剂 作者&#xff1a;Luning Chen, Zhigang Song, Shuchen Zhang, Chung-Kai Chang…

opencv 基础(持续更新中)

1 前言 https://www.couragesteak.com/ 2 安装 3 基础属性demo 打开一张图片&#xff1a; import cv2img cv2.imread(./girl.jpg)print(img.shape) # (1536, 1024, 3) 数组形状 print(type(img)) # numpy 数组 print(img) # 三维数组&#xff08;彩色图片&am…

基于SSM的校园快递代取系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

两个好用的数据标注软件labelme和CVAT

我们使用yolov3、yolov4、yolov5、yolov8等训练自己的权重时&#xff0c;需要有大量标注好的数据集&#xff0c;这里有两个好用的数据标注软件labelme和CVAT 一、labelme labelme&#xff1a;https://github.com/wkentaro/labelme 这个软件用的比较多&#xff0c;但是会经常更…