C++——构造函数(定义以及调用构造函数的过程)

2023-10-26

目录

一、构造函数 

 二、调用构造函数(重点)

三、组合

四、类成员初始化的困惑——冒号语法——成员初始化列表

一、构造函数 

1.定义对象的时候,自动调用当前类的构造函数
   如果程序员没有定义构造函数,则类会提供一个默认的构造函数,给类中的数据成员分配空间。(分配的是栈上的空间)
2.构造的特殊的成员函数,函数名和类名相同,无返回类型,可以带参数(说明构造函数可以重载)
<<能带参数说明可以构成重载<<

#include<iostream>
using namespace std;

class Table
{
public:
	void Set();
	void Print();
private:
	int m_length;
	int m_width;
	int m_height;

};
void Table::Set()
{
	m_length = 120;
	m_width = 40;
	m_height = 80;
}
void Table::Print() {
	cout << m_length << " " << m_width << " " << m_height << endl;
}

//Person p;
int main()
{
	Table t;
	//t.Set();
	t.Print();
}

 二、调用构造函数(重点)

遇到对象,要自动调用当前类的构造函数,调用构造函数的步骤:
(1)传参
(2)根据数据成员在类中的声明顺序,用冒号语法后面的值进行初始化
(3)执行构造函数函数体

初始化:在声明的时候直接给值;
赋初值:赋一个值。

class Table
{
public:
	//①默认构造函数无参
	/*Table()
	{

	}
	*/
    //Table(int l, int w, int h)//②不存在默认构造函数
	Table(int l = 120,int w=40,int h=80)
	
    {
		m_length = l;
		m_width = w;
		m_height = h;
		cout << "Table" << endl;
	}
	void Print()
	{
		cout << m_length << " " << m_width << " " << m_height << endl;
	}
private:
	int m_length;
	int m_width;
	int m_height;

};

int main()
{
	Table t;//定义对象——自动调用Table的构造函数
	t.Print();
	Table t1(60);
	t1.Print();
	Table t2(180,50);
	t2.Print();//调匹配的构造函数
	Table tt[5];//定义一个对象数组 tt[0]~tt[4]
	//cout << "main" << endl;
	Table* p=&t;//定义一个指针变量,p不是对象,只是可以指向Table类型的变量,没有定义Table的对象。但不会调用构造函数
	p->Print();//
}

三、组合

强拥有,一个类的对象作为另外一个类的数据成员——整体和部分的关系

例子:CPU类、鼠标类、键盘类的对象作为电脑类的数据成员。

class CPU
{
public:
	CPU()
	{
		cout << "CPU" << endl;
	}
};

class Mouse
{
public:
	Mouse()
	{
		cout << "Mouse" << endl;
	}
};

class KeyBoard
{
public:
	KeyBoard()
	{
		cout << "KeyBoard" << endl;
	}
};

class Computer
{
public:
	Computer()
	{
		cout << "Computer" << endl;
	}
private:
	CPU cpu;
	Mouse ms;
	KeyBoard kb;

};

int main()
{
	Computer c;
}

四、类成员初始化的困惑

冒号语法(也称成员初始化列表)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++——构造函数(定义以及调用构造函数的过程) 的相关文章

随机推荐

  • linux命令 uname -r 和 uname -a 的详解

    1 uname r 显示操作系统的发行版号2 uname a 显示系统名 节点名称 操作系统的发行版号 内核版本等等 系统名 Linux 节点名称 qyw 操作系统的发行版号 3 10 0 957 21 3 el7 x86 64 命名规则
  • Nginx负载均衡session会话保持方法

    负载均衡时 为了保证同一用户session会被分配到同一台服务器上 可以使用以下方法 1 使用cookie 将用户的session存入cookie里 当用户分配到不同的服务器时 先判断服务器是否存在该用户的session 如果没有就先把co
  • Java 秒杀方案(下)

    技术点 前端 Thymeleaf Bootstrap Jquery 后端 SpringBoot MyBatisPlus Lombok 中间件 Redis RabbitMQ 秒杀方案简介 本短文完成项目搭建 分布式 Session 和秒杀功能
  • Linux DDR3寻址地址映射

    1 相关原理 DDR3内部相当于存储表格 和表格的检索相似 需要先指定 行地址 row 再指定列地址 column 这样就可以准确的找到需要的单元格 对于DDR3内存 单元格称为基本存储单元 也就是每次能从该DDR3芯片读取的最小数据 存储
  • C语言编译过程详解

    前言 C语言程序从源代码到二进制行程序都经历了那些过程 本文以Linux下C语言的编译过程为例 讲解C语言程序的编译过程 编写hello world C程序 hello c include
  • 【mmYOLO】促进视觉项目落地,主打工程经验和实用。从原理配置到属性设置,从模型训练到模型评测

    MMYOLO 是一个基于 PyTorch 和 MMDetection 的 YOLO 系列算法开源工具箱 它是 OpenMMLab 项目的一部分 目前支持的任务有目标检测 旋转框目标检测 具有如下三个特性 统一便捷的算法评测 MMYOLO 统
  • MYSQL 根据不同字段的汇总相同字段的总数

    需求 汇总一个用户不同支付方式的购买的总杯数 buy num 杯数 pay code 支付方式 pay name 支付名称 pay status 支付状态 ms order 订单表 ms user 用户表 SELECT u id pay n
  • 微信小程序开发之视频video组件报错:渲染层网络层错误

    微信小程序开发之视频video组件报错 渲染层网络层错误 视频正常播放 暂停 使用正常 但报错 From server 61 147 235 115 console error VM1074 1 anonymous VM1101 2 VM1
  • LCP概念

    http blog csdn net zzfcnc article details 6660456 对于PPP协议 可以讲解的内容非常多 这个协议的应用也非常的广泛 那么这里我们就重点讲解一下LCP的内容 首先我们需要来哦接一下ppp协议的
  • python实现跨excel的工作表sheet之间的复制

    python 将test1的Sheet1通过 跨文件 复制到test2的Sheet2里面 包括谷歌没有能搜出这种问题答案 我们贴出代码 我们加载openpyxl这个包来解决 from openpyxl import load workboo
  • 【数据库 Mysql查询系列】--检索出stu表中‘计算机工程’或‘软件工程’专业的学生的记录,结果集按学号升序排序。

    涉及到的两个表 代码如下 select sno as 学号 sname as 姓名 sex as 性别 mname as 专业 from stu major where stu mno major mno and mname in 计算机工
  • nodejs快速上手编写程序

    module export 和 exports 的区别 根本上的区别 exports 返回的是模块函数 module exports 返回的是模块对象本身 返回的是一个类 使用上的区别是 exports 的方法可以直接调用 module e
  • 普通树转二叉树

    实现方法 对于普通树转二叉树 要记住6个字口诀 左儿子 右兄弟 实现的步骤是这样的 将树的根节点直接作为二叉树的根节点 将树的根节点的第一个子节点作为根节点的左儿子 若该子节点存在兄弟节点 则将该子节点的第一个兄弟节点 方向从左往右 作为该
  • H无穷控制

    H无穷优化控制问题可归纳为 求出一个使系统内部稳定的控制器K s 使闭环传函Tzw的无穷范数极小 LQG的弱点 对控制的一个主要挑战使多变量控制系统设计 因为MIMO系统的传函是一个矩阵 LQG是一种在状态空间的框架内 对MIMO系统进行设
  • 灰度世界算法(Gray World Algorithm)

    转自 http blog csdn net u010839382 article details 41789261 utm source tuicool 人的视觉系统具有颜色恒常性 能从变化的光照环境和成像条件下获取物体表面颜色的不变特性
  • JDBC连接MySQL数据库及示例

    JDBC是Sun公司制定的一个可以用Java语言连接数据库的技术 一 JDBC基础知识 JDBC Java Data Base Connectivity java数据库连接 是一种用于执行SQL语句的Java API 可以为多种关系数据库提
  • Ubuntu 20.04 系统备份和还原

    最近大家Ubuntu开发环境 经常出现搭着搭着系统就挂了 于是开始琢磨了Ubuntu系统的备份和还原 以备不时之需 Linux环境搭建实在是有点太细 好多情况下 就算曾经搭建过一遍 再次搭建有些包还是忘了安装 做好备份是十分必要的 经过了一
  • bmp图片显示函数【只显示800*480的情况】

    下面代码用于在6818开发板上显示800 480大小的bmp图片 说明 1 需提前准备好此规格的bmp图片 2 函数参数为提供的图片路径名 include
  • Saleae Logic打开出现Error Connecting to Socket

    在Saleae Logic官网安装Logic的最新版本后打开出现Error Connecting to Socket Logic官网下载链接 https www saleae com downloads 解决方法 手动安装Visual St
  • C++——构造函数(定义以及调用构造函数的过程)

    目录 一 构造函数 二 调用构造函数 重点 三 组合 四 类成员初始化的困惑 冒号语法 成员初始化列表 一 构造函数 1 定义对象的时候 自动调用当前类的构造函数 如果程序员没有定义构造函数 则类会提供一个默认的构造函数 给类中的数据成员分