C++编程之构造函数

2023-11-03

学习到了C++的构造函数了,之前上的课比较简单加上自己也有一定的编程基础,所以一直都没觉得有什么压力,今天的课感觉有点难了~~


构造函数的作用

  • 在对象被创建时,使用特定的值构造对象,将对象初始化为一个特定的初始状态。
    例如:希望在构造一个Clock类对象时,将初始时间设为0:0:0,就可以通过函数来设置。

构造函数的形式

  • 函数名与类名相同
  • 不能定义返回值类型,也不能有return语句
  • 可以有形式参数,也可以没有形式参数
  • 可以是内联函数
  • 可以重载
  • 可以带默认参数值

构造函数的调用时机

在对象创建时被自动调用
例如:
Clock myClock(0, 0, 0)

默认构造函数

  • 调用时可以不需要实参
    1、参数表为空的构造函数
    2、全部参数都有默认值的构造函数

下面两个都是默认构造函数,如在类中同时出现,将产生编译错误:
Clock();
Clock(int newH = 0, int newM = 0, int newS = 0);

隐含生成的构造函数

  • 如果程序中未定义构造函数,编译器将自动生成一个默认构造函数
  • 参数列表为空,部位数据成为设置初始值;
  • 如果类内定义了成员的初始值,则使用内类定义的初始值;
  • 如果没有定义类内的初始值,则以默认方式初始化;
  • 基本类型的数据默认初始化的值时不确定的

默认构造函数

举例

  • 函数的普通定义方法:
#include <iostream>

using namespace std;

class Clock{
public:
    void setTime(int newH = 0, int newM = 0, int newS = 0);
    void showTime();
private:
    int hour, minute, second;
};

void Clock::setTime(int newH, int newM, int newS){
    hour = newH;
    minute = newM;
    second = newS;
}

void Clock::showTime(){
    cout << hour << ":" << minute << ":" << second;
}

int main(){
    Clock myClock;
    myClock.setTime(8, 30, 30);
    myClock.showTime();
    return 0;
}


  • 构造函数方法之一:
#include <iostream>

using namespace std;

class Clock{
public:
    Clock(int newH, int newM, int newS); // 构造函数
    void setTime(int newH = 0, int newM = 0, int newS = 0);
    void showTime();
private:
    int hour, minute, second;
};

//构造函数的实现
Clock::Clock(int newH, int newM, int newS):
    hour(newH), minute(newM), second(newS){
    }

void Clock::showTime(){
    cout << hour << ":" << minute << ":" << second;
}

int main(){
    Clock c(0, 0, 0); // 自动调用构造函数
    c.showTime();
    return 0;
}


  • 构造函数方法2——自动调用构造函数
#include <iostream>

using namespace std;

class Clock{
public:
    Clock(int newH, int newM, int newS); // 构造函数
    void setTime(int newH = 0, int newM = 0, int newS = 0);
    void showTime();
private:
    int hour, minute, second;
};

//构造函数的实现
Clock::Clock(int newH, int newM, int newS):
    hour(newH), minute(newM), second(newS){
    }

void Clock::showTime(){
    cout << hour << ":" << minute << ":" << second;
}

int main(){
    Clock c(0, 0, 0); // 自动调用构造函数
    c.showTime();
    return 0;
}
  • 构造函数方法3——包含默认构造函数和自动构造函数
#include <iostream>

using namespace std;

class Clock{
public: //外部接口,公有成员函数
    Clock(int newH, int newM, int newS); // 构造函数
    Clock();  // 默认构造函数
    void setTime(int newH = 0, int newM = 0, int newS = 0);
    void showTime();
private:  // 私有数据成员
    int hour, minute, second;
};

//时钟类成员函数的具体实现,默认构造函数
Clock::Clock():
    hour(0), minute(0), second(0){
    }

Clock::Clock(int newH, int newM, int newS):
    hour(newH), minute(newM), second(newS){
    }

void Clock::showTime(){
    cout << hour << ":" << minute << ":" << second;
}

int main(){
    Clock c1(8, 10, 0); // 调用有参数的构造函数
    c1.showTime();

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

C++编程之构造函数 的相关文章

随机推荐

  • 《关键对话,如何高效能沟通》读书笔记(上)

    读书使人进步 每天进步一点点 在工作中相关的能力可以分为七类核心能力 沟通表达能力 信息处理能力 运用科技的能力 计划组织的能力 解决问题的能力 团队合作的能力 数字概念的能力 其中把沟通表达能力列为七类核心能力之首 可见沟通表达能力在一个
  • 网络安全-Mysql注入知识点

    目录 注释 SQL语句 查询语句 UNION LIMIT ORDER BY information schema SCHEMATA TABLES COLUMNS 常用函数 基本函数 盲注 字符串处理函数 报错注入 时间盲注 本篇文章介绍sq
  • 用P5 JS绘制动态绚丽烟花——动态篇

    上一节我们探究了绘制静态图像手绘与码绘的差异 但是万事万物 变化万千 有很多东西仅仅用静态是无法描述的 正如恩格斯所言 整个自然界 从最小的东西到最大的东西 从沙粒到太阳 从原生生物到人 都处于永恒的产生和消灭中 处于不断的流动中 处于无休
  • MySQL库表结构和数据导出导入

    导出数据库 导出dbname表结构 mysqldump uroot p123456 d dbname gt dbname sql 导出dbname表数据 mysqldump uroot p123456 t dbname gt dbname
  • 设备树下的 platform 驱动编写

    一 设备树下的 platform 驱动简介 platform 驱动框架分为总线 设备和驱动 其中总线不需要我们这些驱动程序员去管理 这个是 Linux 内核提供的 我们在编写驱动的时候只要关注于设备和驱动的具体实现即可 在没有设备树的 Li
  • moviepy音视频剪辑:音视频的加载和输出

    专栏 Python基础教程目录 专栏 使用PyQt开发图形界面Python应用 专栏 PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一 概述 在本地进行音视频处理时 首先要从视频文件进行音视频加载 最后要将处理结果输出到文
  • 机器学习 TOP 10 必读论文

    来源 AI科技大本营 编辑 Donna Medium上的机器学习深度爱好者必关注的账号Mybridge照例对11月发表的学术论文进行了排名 整理出了10篇必读论文 建议收藏深读 1 Alpha Zero 用强化学习算法对中国象棋和国际象棋进
  • SD卡 SPI模式操作(1)初始化SD卡

    原文 本人转载 帆登小站 SD卡 SPI模式操作 1 初始化SD卡 作者是初学者 水平有限 本文仅作为个人学习笔记使用 不能保证内容的正确性 部分资料来源于网络 参考了SD卡协议2 0手册等资料 如果有歧义 可以与作者联系 目录 SD卡 S
  • Docker使用阿里云镜像仓库、Harbor介绍和使用、Harbor自动同步镜像

    Docker使用阿里云镜像仓库 这里用阿里云的镜像仓库 使用前准备 登录阿里云找到容器镜像服务 先创建一个命名空间然后就可以创建镜像仓库 得到仓库地址后可以开始使用 上传镜像 1 使用命令先登录 docker login username
  • dede php调用指定文章,织梦dede怎么调用指定的文章

    在织梦dede网站首页调用站内新闻是必不可少的 但是有的时候不能根据自己的需要来调用指定的文章 想要调用自己指定的文章还要做一些修改 在网站中调用指定文章可以使用织梦默认的标签idlist 在调用的时候使用以下代码 dede arclist
  • 达梦数据库JDBC连接池断开自动重连设置

    一 场景 在网络状况不是非常良好 经常会出现暂时性的拥塞或者断开的情况 而且当我们重启数据库时也会发生类似的情况 所以需要配置中间件的连接池来实现连接测试以及自动重连 通过重新配置连接池 成功解决了这个问题 下面会给出一份数据源配置参数详单
  • show processlist 命令详解

    如果有 SUPER 权限 则可以看到全部的线程 否则 只能看到自己发起的线程 这是指 当前对应的 MySQL 帐户运行的线程 mysql gt show processlist Id User Host db Command Time St
  • vue Table组件封装 - 渲染列表、不同表格列、分页、位于编辑面板中

    效果描述 点击输入框弹出table面板 面板包括标题 列表分页 检索条件 确定取消安钮 单选全选框 面板回显已选中条目 切换页时仍能显示 思路 组件中包括面板整体样式 标题 按钮 分页组件 页面中将搜索条件 th tr用slot传入组件模板
  • mysql order by null last_order by 语句出现null的情况

    Oracle 结论 order by colum asc 时 null默认被放在最后 order by colum desc 时 null默认被放在最前 nulls first 时 强制null放在最前 不为null的按声明顺序 asc d
  • 钢条切割问题(Java)——暴力法(Brute force)

    Rod Cutting题目 注意 本题采用txt文件读入 屏幕输出 如果需要屏幕读入屏幕输出 可以留言或者自己改代码 说明 暴力法 Brute force 列出每种切割方案 比较哪种切割方案利润最大 所需时间T O 2 n import j
  • 自己动手编译octave 4.0.0

    今天在做作业的时候 发现imread不能使用 说要安装相应的图形包 可是要安装image时 却发现要求4 0 0版本 而我本机的linux系统ubuntu15 04只有3 8 x的安装源 没办法 只能自己动手编译 安装啦 sudo apt
  • java算法-冒泡排序

    算法原理 例如我们有一个数组 我们如果需要把较大的元素排在后面 把小的元素排在前面 那么需要从头部到尾开始比较操作 依次比较相邻的两个数 如果第一个比第二个大 就交换他们两个 往后对每个相邻的元素都做这样的比较 交换操作 这样到数组尾部时
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • ip和端口号的正则表达式

    目录 前言 1 ip地址 2 端口号 3 ip 端口号 前言 ip以及端口号的正则表达式 在逻辑应用比较广泛 前置知识点 匹配开头第一个 匹配的结尾 对于更多的知识点可看我java框架 java框架零基础从入门到精通的学习路线 超全 1 i
  • C++编程之构造函数

    学习到了C 的构造函数了 之前上的课比较简单加上自己也有一定的编程基础 所以一直都没觉得有什么压力 今天的课感觉有点难了 构造函数的作用 在对象被创建时 使用特定的值构造对象 将对象初始化为一个特定的初始状态 例如 希望在构造一个Clock