当前位置: 首页 > news >正文

C++零碎记录(十)

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.lryc.cn/news/166836.html

相关文章:

  • 人类学习 vs. 机器学习
  • 【LeetCode-中等题】15. 三数之和
  • Apache Tomcat漏洞复现
  • C++模版基础
  • 解决 Elasticsearch 分页查询记录超过10000时异常
  • 百度千帆大模型文心一言api调用
  • 关于HTTP协议的概述
  • ATFX汇市:8月名义与核心CPI走势分化,美国通胀率算升高还是降低?
  • c++ 中的函数指针
  • 奶牛个体识别 奶牛身份识别
  • 【力扣每日一题】2023.9.13 检查骑士巡视方案
  • 【Vue】关于CSS样式绑定整理
  • Sql语句大全--更新
  • Java面试八股文宝典:序言
  • 【多线程案例】单例模式
  • 阿里云部署SpringBoot项目启动后被杀进程的问题
  • git仓库推送错误
  • 计网第五章(运输层)(三)
  • OpenCV 07(图像滤波器)
  • uniapp项目实践总结(十三)封装文件操作方法
  • 程序地址空间
  • HBS 家庭总线驱动和接收芯片MS1192,应用于电话及相关设备、空调设备、安全设备、AV 装置
  • IO和进程day08(消息队列、共享内存、信号灯集)
  • 【数据结构】—堆排序以及TOP-K问题究极详解(含C语言实现)
  • Python语言概述
  • 电子电路学习笔记之NCV84120DR2G——车规级单通道高压侧驱动器
  • YOLO DNF辅助教程完结
  • Hadoop-Hive
  • 竞赛 基于机器视觉的火车票识别系统
  • conda与pip镜像源环境配置