阶段学习的总结

2023-05-16

当程序中存在多个对象的时候,如何确定这些对象的析构顺序

  1. 单个对象创建时构造函数的调用顺序
    调用父类的构造过程
    调用成员变量的构造函数(调用顺序与声明顺序相同)
    调用类自身的构造函数

  2. 多个对象析构时
    -析构顺序域构造顺序相反
    实例分析:

#include<stdio.h>
class Member
{
	const char* ms;
public:
	Member(const char* s)
	{
		printf("Member(const char* s):%s\n",s);
		ms = s;
	}
	~Member()
	{
		printf("~Member():%s\n",ms);
	}
};
class Test
{
	Member mA;
	Member mB;
public:
	Test():mB("mB"),mA(mA)
	{
		printf("Test()\n");
	}
	~Test()
	{
		printf("~Test()\n");
	}
};

Member gA("gA");

int main()
{
	Test t;
	
	return 0;
}
运行结果:
Member(const char* s):gA
Member(const char* s):mA
Member(const char* s):mB
Test()
~Test()
~Member():mB
~Member():mA
~Member():gA

const对象的疑问
关键字能否修饰类的对象
如果可以,有什么特性?

const关键字能够修饰对象
const修饰的对象为只读对象
只读对象的成员变量不允许被改变
只读对象是编译阶段的概念,运行时无效

C++中的const成员函数

-const对象只能调用const的员函数
-const成员函数中只能调用const成员函数
-const成员函数中不能直接改变成员变量的值

const成员函数的定义:

Type ClassName::function(Type p) const
类中的函数声明与实际函数定义中都必须带const关键字
#include<stdio.h>
class Test
{
	int mi;
public:
	Test(int i);
	Test(const Test& t);
	int getMI():
};

Test::Test(const Test& t)
{
}

int Test::getMI()
{
	return mi;
}

int main()
{
	const Test t(1);
	printf("t.getMI() = %d\n",t.getMI());//error报错
	return 0;
}
若将int getMi()改成int getMi()const且Test::getMi()const就不会报错了

成员函数和成员变量都是隶属于具体对象的嘛??

从面向对象的角度
	-对象由属性(成员变量)和方法(成员函数)构成
从程序运行的角度
	-对象由数据和函数构成
		数据可以位于栈,堆和全局数据区
		函数只能位于代码段

结论

-每一个对象拥有自己独立的属性(成员变量)
-所有的对象共享类的方法
-方法能够直接访问对象的属性
-方法中的隐藏参数this用于指代当前对象
#include<stdio.h>
class Test
{
	int mi;
public:
	int mj;
	Test(int i);
	Test(const Test& t);
	int getMI():
	int print();
};

Test::Test(int i)
{
	mi = i;
}
Test::Test(const Test& t)
{
	mi = t,mi;
}

int Test::print()
{
	printf("this = %p\n",this);
}
int Test::getMi()
{
	return mi;
}

int main()
{
	Test t1(1);
	Test t2(2);
	Test t3(3);
	printf("t1.getMi() = %d\n",t1.getMi());
	printf("&t1 = %p\n",&t1);
	t1.print();
	
	printf("t2.getMi() = %d\n",t2.getMi());
	printf("&t2 = %p\n",&t2);
	t2.print();
	
	printf("t3.getMi() = %d\n",t3.getMi());
	printf("&t3 = %p\n",&t3);
	t3.print();
	return 0;
}

小结

对象的析构顺序与构造顺序相反
const关键字能够修饰对象,得到只读对象
只读对象只能调用const成员函数
所有对象共享类的成员函数
隐藏的this指针用于表示当前对象
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阶段学习的总结 的相关文章

随机推荐

  • C++ 模板与泛型编程简述

    目录 1 什么是模板和泛型编程 2 定义及使用模板 1 什么是模板和泛型编程 什么是模板 xff1f 什么是泛型编程 xff1f 模板的概念与泛型编程是相辅相成的 想象一个场景 xff1a 我们需要比较两个整数或两个字符串的大小 xff0c
  • 在jupyter notebook中添加和删除环境【笔记】

    在jupyter notebook中加入虚拟环境 xff1a python span class token operator span m ipykernel install span class token operator span
  • 浮点数怎么用二进制表示

    浮点数怎么用二进制表示 对于浮点数在计算机中是怎么用二进制表示的 xff0c 这个知识点让我学了很久 xff0c 很多资料讲的特别抽象难懂 xff0c 所以今天我想用自己的方式讲一讲 学过 计算机组成原理 或者类似 计算机系统 这些课程的小
  • Git合并出问题了怎么办

    首先 xff0c 我们不要在master中去进行修改提交 xff0c 一般这个时候我们新建一个分支 xff0c 将合并后的代码复制到新的分支中去 xff0c 然后我们对分支去进行一个修改 xff0c 当修改完成之后 xff0c 再合并到ma
  • 解决win11不能开启5GHZ热点的问题

    对于电脑5GHZ波段不可用的问题解决方法如下 xff1a 手机打开5GHz先让电脑连接电脑开启5Ghz热点断开WiFi xff0c 这时就可以用电脑开的5Ghz的热点了
  • SpringBoot 各层之间的关系

    一 层级 SpringBoot 分为四层 xff1a controller层 service层 dao层 entity层 entity层 xff1a 和model层一样 xff0c 存放的是实体类 xff0c 属性值与数据库值保持一致 xf
  • IEEE 802.1至802.12各层的 功能及特点

    IEEE 802 1 通用网络概念及网桥等 IEEE 802 2 逻辑链路控制等 IEEE 802 3 CSMA CD访问方法及物理层规定 IEEE 802 4 ARCnet总线结构及访问方法 物理层规定 IEEE 802 5 Token
  • ubuntu 常用命令大全

    一 文件 文件夹管理 ls 列出当前目录文件 xff08 不包括隐含文件 xff09 ls a 列出当前目录文件 xff08 包括隐含文件 xff09 ls l 列出当前目录下文件的详细信息 cd 回当前目录的上一级目录 cd 回上一次所在
  • MyBatis mapper.xml中使用静态常量或者静态方法

    使用MyBatis技术 xff0c 书写mapper xml时 xff0c 如果在其中的ognl表达式或者sql中直接使用一些数字或者字符串的话 xff0c 会造成难以维护的问题 在Java编码中 xff0c 我们通常会把这些数字或者字符串
  • get请求和post请求的区别

    HTTP协议 什么是协议 xff1f 协议实际上是某些人 xff0c 或者某些组织提前制定好的一套规范 xff0c 大家都按照这个规范来 xff0c 这样可以做到沟通无障碍 协议就是一套规范 xff0c 就是一套标准 由其他人或其他组织来负
  • 常见网络协议

    网络协议为计算机网络中进行数据交换而建立的规则 标准或约定的集合 例如 xff0c 网络中一个微机用户和一个大型主机的操作员进行通信 xff0c 由于这两个数据终端所用字符集不同 xff0c 因此操作员所输入的命令彼此不认识 为了能进行通信
  • C++ 栈(stack)使用简述

    目录 1 有关函数的作用 2 测试用例 至于栈的结构与原理 xff08 先入后出 xff09 这里就不细说了 xff0c 这里主要记录下 C 43 43 的头文件 lt stack gt 有关栈的操作是如何使用的 1 有关函数的作用 sta
  • 解决一个镜像ID同时拥有多个tag的问题

    docker rmi span class token operator lt span REPOSITORY TAG span class token operator gt span
  • 蜂鸣器介绍

    蜂鸣器介绍 蜂鸣器是一种将电信号转换为声音信号的器件 xff0c 常用来产生设备的按键音 报警音等提示信号 蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器 有源蜂鸣器 xff1a 内部自带振荡源 xff0c 将正负极接上直流电压即可持续发声
  • DS1302时钟芯片(SPI协议)

    DS1302时钟芯片 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片 它可以对年 月 日 周 时 分 秒进行计时 xff0c 且具有闰年补偿等多种功能 可以把该芯片看成一个小型的单片机 xff0c 其内部
  • ESP8266与单片机通信共地问题

    ESP8266与单片机通信共地问题 1 共地 xff1a 在数字电路中 xff0c 要判断一个电平信号的高低 xff0c 就需要一个标准来判断 xff0c 这个判断标准就是0电平 也叫地 xff09 xff0c 要把所有IC芯片的地连在一起
  • RS-485接口协议详解

    RS 485详解 通信协议 通讯协议主要是实现两个设备之间的数据交换功能 xff0c 通讯协议分硬件层协议和软件层协议 硬件层协议决定数据如何传输问题 xff0c 比如要在设备1向设备2发送0x63 xff0c 0x63的二进制数为0110
  • 使用阿里云IoT Studio建立物模型可视化界面

    使用阿里云IoT Studio建立物模型可视化界面 上一篇文章介绍了如何使用ESP 01S上报数据到物模型 xff1a https blog csdn net weixin 46251230 article details 12899671
  • 51单片机 简易光电循迹小车

    前言 应学校暑期课程要求 xff0c 也作为和小组成员完成一次对51单片机的练手 xff0c 制作了简易的光电小车 xff0c 完成了循迹功能 xff0c 下面包括较为详细的小车搭建过程以及完整代码 硬件部分准备 电源 可充电的电池组是智能
  • 阶段学习的总结

    当程序中存在多个对象的时候 xff0c 如何确定这些对象的析构顺序 单个对象创建时构造函数的调用顺序 调用父类的构造过程 调用成员变量的构造函数 xff08 调用顺序与声明顺序相同 xff09 调用类自身的构造函数 多个对象析构时 析构顺序