C++中的类、对象、函数、构造函数、析构函数

在C++中,(class)是用于定义对象的模板或蓝图。类中可以包含数据成员(变量)和成员函数(方法)。对象是类的实例,通过类定义创建的实体。构造函数和析构函数是特殊的成员函数,用于对象的初始化和清理。

类和对象

定义类

类是通过class关键字定义的。类包含数据成员和成员函数。

class MyClass {
private:int data; // 数据成员public:// 成员函数void setData(int value) {data = value;}int getData() const {return data;}
};

创建对象

对象是类的实例,通过类的构造函数创建。

int main() {MyClass obj; // 创建MyClass类的对象objobj.setData(5);std::cout << "Data: " << obj.getData() << std::endl;return 0;
}

构造函数

构造函数是用于初始化对象的特殊成员函数。它们在对象创建时自动调用。构造函数的名称与类名相同,并且没有返回类型。

class MyClass {
private:int data;public:// 默认构造函数MyClass() : data(0) {std::cout << "Default constructor called" << std::endl;}// 带参数的构造函数MyClass(int value) : data(value) {std::cout << "Parameterized constructor called" << std::endl;}// 拷贝构造函数MyClass(const MyClass& other) : data(other.data) {std::cout << "Copy constructor called" << std::endl;}int getData() const {return data;}
};

析构函数

析构函数是用于清理对象的特殊成员函数。它们在对象生命周期结束时自动调用。析构函数的名称与类名相同,并且在前面加上~。析构函数也没有返回类型。

class MyClass {
private:int data;public:MyClass() : data(0) {std::cout << "Constructor called" << std::endl;}~MyClass() {std::cout << "Destructor called" << std::endl;}void setData(int value) {data = value;}int getData() const {return data;}
};

示例1

将上面几段代码连接起来,输入数据测试结果:

#include <iostream>class MyClass {
private:int data;public:// 默认构造函数MyClass() : data(0) {std::cout << "Default constructor called" << std::endl;}// 带参数的构造函数MyClass(int value) : data(value) {std::cout << "Parameterized constructor called" << std::endl;}// 拷贝构造函数MyClass(const MyClass& other) : data(other.data) {std::cout << "Copy constructor called" << std::endl;}// 析构函数~MyClass() {std::cout << "Destructor called" << std::endl;}void setData(int value) {data = value;}int getData() const {return data;}
};int main() {MyClass obj1; // 调用默认构造函数MyClass obj2(10); // 调用带参数的构造函数MyClass obj3 = obj2; // 调用拷贝构造函数obj1.setData(5);std::cout << "obj1 Data: " << obj1.getData() << std::endl;std::cout << "obj2 Data: " << obj2.getData() << std::endl;std::cout << "obj3 Data: " << obj3.getData() << std::endl;return 0;
}

输出

Default constructor called
Parameterized constructor called
Copy constructor called
obj1 Data: 5
obj2 Data: 10
obj3 Data: 10
Destructor called
Destructor called
Destructor called

示例2

实现一个用于管理银行账户的类,这个类将包含以下功能:

  • 创建一个新账户。
  • 存款。
  • 取款。
  • 查询账户余额。
    . 定义银行账户类

定义一个名为BankAccount的类,它包含以下成员:

数据成员:账户余额(balance)。
成员函数:构造函数:用于初始化账户余额。存款函数:用于向账户存入金额。取款函数:用于从账户取出金额。查询余额函数:用于获取当前余额。析构函数:用于在对象销毁时输出消息。
#include <iostream>class BankAccount {
private:double balance; // 账户余额public:// 默认构造函数BankAccount() : balance(0.0) {std::cout << "Default constructor called. Account created with balance: " << balance << std::endl;}// 带参数的构造函数BankAccount(double initialBalance) : balance(initialBalance) {std::cout << "Parameterized constructor called. Account created with balance: " << balance << std::endl;}// 存款函数void deposit(double amount) {if (amount > 0) {balance += amount;std::cout << "Deposited: " << amount << ". New balance: " << balance << std::endl;} else {std::cout << "Invalid deposit amount!" << std::endl;}}// 取款函数void withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;std::cout << "Withdrawn: " << amount << ". New balance: " << balance << std::endl;} else {std::cout << "Invalid withdraw amount or insufficient funds!" << std::endl;}}// 查询余额函数double getBalance() const {return balance;}// 析构函数~BankAccount() {std::cout << "Destructor called. Account with balance " << balance << " is being closed." << std::endl;}
};int main() {BankAccount account1; // 使用默认构造函数account1.deposit(100.0);account1.withdraw(30.0);std::cout << "Current balance: " << account1.getBalance() << std::endl;BankAccount account2(500.0); // 使用带参数的构造函数account2.deposit(150.0);account2.withdraw(200.0);std::cout << "Current balance: " << account2.getBalance() << std::endl;return 0;
}

输出

Default constructor called. Account created with balance: 0
Deposited: 100. New balance: 100
Withdrawn: 30. New balance: 70
Current balance: 70
Parameterized constructor called. Account created with balance: 500
Deposited: 150. New balance: 650
Withdrawn: 200. New balance: 450
Current balance: 450
Destructor called. Account with balance 70 is being closed.
Destructor called. Account with balance 450 is being closed.

总结

  • 类:通过class关键字定义,包含数据成员和成员函数。
  • 对象:类的实例,通过构造函数创建。
  • 函数:类中的成员函数,用于操作类的对象。
  • 构造函数:用于初始化对象,在对象创建时自动调用。
  • 析构函数:用于清理对象,在对象生命周期结束时自动调用。

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

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

相关文章

php 做一个mqtt按钮,发布触发信号

在之前博客php 做一个文件下载服务器&#xff0c;得避免跨路径工具&#xff0c;安全很重要 中加了一个按钮&#xff0c;触发物联网设备返回数据。基于mqtt开发&#xff0c;如果想知道mqtt如何搭建&#xff0c;可以看我的博客【MQTT&#xff08;1&#xff09;】服务端的搭建 效…

机器学习 | 回归算法原理——多重回归

Hi&#xff0c;大家好&#xff0c;我是半亩花海。接着上次的多项式回归继续更新《白话机器学习的数学》这本书的学习笔记&#xff0c;在此分享多重回归这一回归算法原理。本章的回归算法原理基于《基于广告费预测点击量》项目&#xff0c;欢迎大家交流学习&#xff01; 目录 一…

Air780EP模块 LuatOS开发-MQTT接入阿里云应用指南

简介 本文简单讲述了利用LuatOS-Air进行二次开发&#xff0c;采用一型一密、一机一密两种方式认证方式连接阿里云。整体结构如图 关联文档和使用工具&#xff1a;LuatOS库阿里云平台 准备工作 Air780EP_全IO开发板一套&#xff0c;包括天线SIM卡&#xff0c;USB线 PC电脑&…

产品经理-​统计数据是如何产生的(20)

在互联网当中,监测一个项目的实际情况,在产品当中,往往需要进行数据的监测,看用户的习惯,进而进行对产品进行优化,比如统计产品用户的一些行为,鼠标点击,鼠标hover,停留时长,进入,进出等 产品经理看到的数据统计一般是经历了下面几个阶段 数据埋点&#xff1a;这个阶段产品经理…

RK3568笔记四十三:MPU6050驱动开发(硬件I2C_3)

若该文为原创文章&#xff0c;转载请注明原文出处。 正点原子提供的I2C有测试ap3216c&#xff0c;SH3001等传感器&#xff0c;根据手册操作可以实现效果。 这里记录使用I2C3驱动MPU6050. 记录原因是前面有模拟I2C&#xff0c;但硬件如何使用&#xff0c;有点不是很清楚&#…

猫头虎分享:GPT-4o Mini VS GPT-3.5 Turbo 新旧对决,谁能拔得头筹?

GPT-4o Mini VS GPT-3.5 Turbo &#x1f31f; 新旧对决&#xff0c;谁能拔得头筹&#xff1f; 我们正在进入廉价语言模型的新时代 &#x1f680; 阅读时间&#xff1a;6分钟 摘要&#xff1a; 尽管 GPT-4o 功能强大&#xff0c;但我并不经常使用它。如果我正在寻找一个用于复…

【Hec-Ras】案例1:韩国Seung-gi stream稳定流/非稳定流模拟

Hec-Ras案例1&#xff1a;韩国Seung-gi stream 研究区域&#xff1a;Seung-gi stream&#xff08;韩国&#xff09;研究数据降水数据&#xff08;Rainfall data&#xff09; 步骤1&#xff1a;创建工程文件/打开已有工程文件步骤2&#xff1a;参数调整步骤2.1&#xff1a;数据导…

学习笔记8:短链代理

短链代理 短链代理&#xff08;Short URL Proxy&#xff09;是一种网络服务&#xff0c;它将一个长网址&#xff08;URL&#xff09;转换成一个短网址&#xff0c;使得用户可以通过一个更短、更易于分享和记忆的链接访问原始的长网址指向的内容。以下是短链代理的一些关键特性…

mysql 数据库空间统计sql

mysql 数据库空间统计 文章目录 mysql 数据库空间统计说明一、数据库存储代码二、查询某个数据库的所有表的 代码总结 说明 INFORMATION_SCHEMA Table Reference 表参考 information_schema是‌MySQL中的一个特殊数据库&#xff0c;它存储了关于所有其他数据库的元数据信息。…

D4.前缀和、差分

前缀和 一维前缀和&#xff08;区间&#xff09; 这样的好处是&#xff0c;可以以O(1)的时间复杂度来计算。而不是遍历O(n)。当读入数据非常大&#xff08;>1000000&#xff09;的时候&#xff0c;建议使用scanf()来读取数据&#xff0c;会比cin >> 快很多。在全局开…

享元模式(结构型)

目录 一、前言 二、享元模式 三、总结 一、前言 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;用于减少大量细粒度对象的内存占用。它通过共享尽可能多的相同数据来节约内存空间。 享元模式由以下角色组成&#xff1a; Flyweight&…

「JavaEE」Spring MVC:基本操作1

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;JavaEE &#x1f387;欢迎点赞收藏加关注哦&#xff01; 简介 Spring Web MVC 是⼀个 Web 框架&#xff0c;简称为 Spring MVC MVC 是 Model View Controller 的缩写&#xff0c;它是软件工程…

vscode回退不显示了,不方便操作

一、后退前进按钮 顶部显示&#xff0c;方便调试 <—— ——> 文件-> 首选项 -> 设置->commandcenter->勾选 Window: Title Bar Style->custom 将native —>custom

力扣每日一题1186. 删除一次得到子数组最大和【动态规划】

本题的核心在于对于每个元素&#xff0c;我们分别考虑保留和删除两种状态&#xff0c;并根据前面的状态转移来更新当前状态。最后&#xff0c;遍历所有元素&#xff0c;找到最大和即可。 状态定义 dp[i][0] 表示以第 i 个元素结尾且未删除元素的子数组的最大和。dp[i][1] 表示…

Qemu virtio-blk 后端驱动开发 - PureFlash对接

本文以PureFlash为例&#xff0c;介绍了如何将一个新的存储类型对接到qemu虚拟化平台下&#xff0c;为虚机提供存储能力。 关于virtio-blk以及其工作原理这里就不介绍了&#xff0c;网上有很多分析的文章。总之就是如果我们想给虚机提供一种新的存储类型&#xff08;不同于标准…

clickhouse处理readonly报错

1&#xff0c;clickhouse执行 SYSTEM RESTORE REPLICA db_com.dwd_com_t_judge_result_local; SYSTEM RESTORE REPLICA db_com.dwd_com_t_judge_result_local Query id: 70669be0-eef8-41da-b761-4980ce48ece2 0 rows in set. Elapsed: 0.001 sec. Received exception fro…

【日常记录】【JS】对一个数组,按照某个字段的值,进行分组

文章目录 1. 前言2. lodash 的分组3. Object.groupBy()参考链接 1. 前言 在开发中&#xff0c;经常会遇到一组数据&#xff0c;要按照某个字段进行分组&#xff0c;这个时候会有很多种方法&#xff0c;可以使用 forEach、reduce、等其他方法 reduce 方法 function groupBy(arr…

LLama 405B 技术报告解读

LLama 405B 技术报告解读 果然传的消息都是真的&#xff0c;meta在24号凌晨发布了llama 3的405B版本&#xff0c;这次还是做一个技术报告解读。 值得一提的是&#xff0c;在技术报告的开头&#xff0c;meta特意强调了一个 Managing complexity&#xff0c;大意是管控复杂度。…

主题公园- 海豹主题式风格餐厅设计【AIGC应用】

业务背景&#xff1a;海洋馆针对细分客群增设一个打卡主题点位&#xff0c;以海豹主题式餐厅为打卡卖点&#xff0c;效果参见海豹主题式风格。 AIGC概念图制作平台&#xff1a;&#xff08;可灵&#xff09; https://klingai.kuaishou.com/ 关键词&#xff1a; 海豹主题餐厅…

Blender插入关键帧的位置报错

在操作过程中&#xff0c;有时候是误操作或者是做动画选择了活动插帧集&#xff0c;导致按i键插入关键帧一直报提示&#xff1a;插入关键帧的帧位置或者是其他的报错弹窗。 1、解决方法是&#xff1a;在时间线的抠像(插帧)选项里&#xff0c;将活动插帧集给清空 2、若是骨骼动画…