C++中类和结构体的区别(代码说明)

C++中的类和结构体都是用于定义自定义数据类型的关键字。它们之间有很多相似之处,但也有一些关键的区别。

1 主要区别

区别结构体
默认访问权限私有公有
是否支持多态支持不支持
是否支持继承支持支持
是否可以定义构造函数和析构函数可以可以
常用场景封装数据和行为,实现面向对象编程封装简单的数据

2 代码示例

class Person {
public:Person() {} // 默认构造函数Person(const std::string& name, int age) : name_(name), age_(age) {} // 带参数的构造函数const std::string& name() const { return name_; } // 获取姓名void set_name(const std::string& name) { name_ = name; } // 设置姓名int age() const { return age_; } // 获取年龄void set_age(int age) { age_ = age; } // 设置年龄private:std::string name_; // 姓名int age_; // 年龄
};int main() {Person person("John Doe", 30); // 使用带参数的构造函数创建对象std::cout << person.name() << " is " << person.age() << " years old." << std::endl;person.set_name("Jane Doe"); // 使用公共成员函数设置姓名person.set_age(31); // 使用公共成员函数设置年龄std::cout << person.name() << " is " << person.age() << " years old." << std::endl;return 0;
}

的特点:

  • 默认访问权限为私有:这意味着类中的成员变量和成员函数默认情况下只能在类内部访问,外部无法直接访问。
  • 支持多态:这意味着可以通过重载虚函数来实现不同的行为。
  • 可以定义构造函数和析构函数:构造函数用于在创建对象时初始化成员变量,析构函数用于在销毁对象时释放资源。
  • 常用场景:封装数据和行为,实现面向对象编程。

结构体

struct Point {int x; // x 坐标int y; // y 坐标
};int main() {Point point1 = {1, 2}; // 使用初始化列表初始化结构体std::cout << "Point1: (" << point1.x << ", " << point1.y << ")" << std::endl;Point point2; // 默认初始化结构体point2.x = 3; // 直接访问成员变量设置值point2.y = 4;std::cout << "Point2: (" << point2.x << ", " << point2.y << ")" << std::endl;return 0;
}

结构体 的特点:

  • 默认访问权限为公有:这意味着结构体中的成员变量和成员函数默认情况下可以在外部直接访问。
  • 不支持多态:无法通过重载虚函数来实现不同的行为。
  • 可以定义构造函数和析构函数:与类相同。
  • 常用场景:封装简单的数据。

3 总结

  • 类和结构体都是用于定义自定义数据类型的关键字。
  • 类和结构体的主要区别在于默认访问权限、是否支持多态以及常用场景。
  • 类通常用于封装数据和行为,实现面向对象编程。
  • 结构体通常用于封装简单的数据。

建议

  • 在需要封装数据和行为并实现面向对象编程时,使用类。
  • 在需要封装简单的数据时,使用结构体。

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

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

相关文章

Python算法探索:从经典到现代(二)

一、引言 Python作为一种高级编程语言&#xff0c;其简洁明了的语法和丰富的库资源&#xff0c;使得它成为算法实现的理想选择。本文将带您从经典算法出发&#xff0c;逐步探索到现代算法&#xff0c;感受Python在算法领域的魅力。 二、经典算法&#xff1a;贪心算法 贪心算法…

[日常使用] Shell常用命令

Shell是什么&#xff1f; Shell简介 Shell是操作系统的外壳&#xff0c;是用户与操作系统内核之间的主要接口。它接收用户的命令并将其传递给内核执行&#xff0c;然后将执行结果返回给用户。Shell不仅是一个命令解释器&#xff0c;也是一种强大的编程语言。常见的Shell分为图…

【MySQL】-16 MySQL综合-2(MySQL的优点+MySQL5.7新特性+MySQL客户端和服务器端工具集)

MySQL的优点MySQL5.7新特性MySQL客户端和服务器端工具集 MySQL的优势&#xff08;优点&#xff09;MySQL 5.7的新特性1) 随机 root 密码2) 自定义 test 数据库3) 默认 SSL 加密4) 密码过期策略5) 用户锁6) 全面支持JSON7) 支持两类生成列&#xff08;generated column&#xff…

Web基础01-HTML+CSS

目录 一、HTML 1.概述 2.html结构解析 3.HTML标签分类 4.HTML标签关系 5.HTML空元素 6.HTML属性 7.常用标签 &#xff08;1&#xff09;HTML标签 &#xff08;2&#xff09;标题标签 &#xff08;3&#xff09;换/折行标签 &#xff08;4&#xff09;段落标签 &am…

开源软件:推动技术繁荣

目录 开源软件的影响力 开源软件的优点 开源软件如何推动技术创新 开源软件的商业模式 开源软件的安全风险 开源软件的未来发展趋势 开源软件的影响力 随着信息技术的快速发展&#xff0c;开源软件已经成为软件开发的趋势&#xff0c;并产生了深远的影响。开源软件的低成…

平常开发java项目时也没用序列化,没感觉到有啥影响呢,这是为什么?

平常开发java项目时也没用序列化&#xff0c;没感觉到有啥影响呢&#xff0c;这是为什么&#xff1f; 在日常的Java开发中&#xff0c;可能不会直接感受到序列化的存在&#xff0c;特别是在使用现代框架和技术栈时。这主要是因为很多底层细节已经由框架或库隐藏起来&#xff0…

<网络安全>《31 网络信息安全基础(2)中英术语整理》

A 01 高级持久威胁&#xff08;APT&#xff09; 一种网络攻击&#xff0c;使用复杂的技术持续对目标政府和公司进行网络间谍活动或其他恶意活动。通常由具有丰富专业知识和大量资源的对手进行-通常与民族国家参与者相关。 这些攻击往往来自多个入口点&#xff0c;并且可能使…

Django学习全纪录:Django视图和路由的配置,应用的创建以及注册

导言 在之前的文章中,我们已经将Django的环境部署完成,包括一些注意事项以及前期工作,都已经完成。这篇文章,我们就可以正式开始干活了。 学习目标 1、学习创建应用以及注册APP 2、初步认识视图和路由,以及编写简单的代码 3、启动应用观察变化 创建第一个应用(APP) …

发掘GPT-4商业创新的潜力

GPT-4在商业创新方面的应用潜力巨大&#xff0c;它能够基于庞大的训练数据集和强大的语言生成能力&#xff0c;协助企业或个人用户在多个商业场景中推动创新&#xff1a; 市场分析与战略规划&#xff1a;GPT-4可以对历史数据、行业趋势、竞争对手信息进行深度分析&#xff0c;并…

华为机考入门python3--(14)牛客14-字符串排序

分类&#xff1a;列表、排序 知识点&#xff1a; 字典序排序 sorted(my_list) 题目来自【牛客】 def sort_strings_by_lex_order(strings): # 使用内置的sorted函数进行排序&#xff0c;默认是按照字典序排序 sorted_strings sorted(strings) # 返回排序后的字符串列…

php基础学习之运算符(重点在连接符和错误抑制符)

运算符总结 在各种编程语言中&#xff0c;常用的运算符号有这三大类&#xff1a; 算术运算符&#xff1a;&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;%位运算符&#xff1a;&&#xff0c;|&#xff0c;^&#xff0c;<<&#xff0c;>>赋值运算符&…

洛谷C++简单题小练习day11—字母转换,分可乐两个小程序

day11--字母转换--2.14 习题概述 题目描述 输入一个小写字母&#xff0c;输出其对应的大写字母。例如输入 q[回车] 时&#xff0c;会输出 Q。 代码部分 #include<bits/stdc.h> using namespace std; int main() { char n;cin>>n;cout<<char(n-32)<…

代码+视频基于R语言进行K折交叉验证

我们在建立数据模型后通常希望在外部数据验证模型的检验能力。然而当没有外部数据可以验证的时候&#xff0c;交叉验证也不失为一种方法。交叉验验证&#xff08;交叉验证&#xff0c;&#xff23;&#xff36;&#xff09;则是一种评估模型泛化能力的方法&#xff0c;广泛应用…

尚硅谷最新Node.js 学习笔记(二)

目录 五、HTTP协议 5.1、概念 5.2、请求报文的组成 5.3、HTTP 的请求行 5.4、HTTP 的请求头 5.5、HTTP 的请求体 5.6、响应报文的组成 5.7、创建HTTP服务 操作步骤 测试 注意事项 5.8、浏览器查看 HTTP 报文 查看请求行和请求头 查看请求体 查看URL查询字符串 …

PHP脉聊交友系统网站源码,可通过广告变现社交在线聊天交友即时通讯APP源码,附带视频搭建教程

探索全新社交体验&#xff1a;一站式PHP交友网站解决方案 &#x1f310; 全球化交友&#xff0c;无界沟通 在数字化的浪潮下&#xff0c;社交已不再受地域限制。我们的PHP交友网站不仅支持多国语言&#xff0c;还配备了即时翻译功能&#xff0c;让您轻松跨越语言障碍&#xff…

编译OpenSSL时报错,Can‘t locate IPC/Cmd.pm in @INC

编译OpenSSL 3.0.1时报错&#xff0c;错误信息如下 解决方法&#xff1a; 安装perl-CPAN yum install -y perl-CPAN进入CPAN的shell模式&#xff0c;首次进入需要配置shell&#xff0c;按照提示操作即可&#xff08;本人perl小白&#xff0c;全部选择默认配置&#xff0c;高…

python3 中try 异常调试 raise 异常抛出

一、什么是异常&#xff1f; 异常即是一个事件&#xff0c;该事件会在程序执行过程中发生&#xff0c;影响了程序的正常执行。 一般情况下&#xff0c;在Python无法正常处理程序时就会发生一个异常。 异常是Python对象&#xff0c;表示一个错误。 当Python脚本发生异常时我…

山脉的个数/攀登者

题目描述 攀登者喜欢寻找各种地图&#xff0c;并且尝试攀登到最高的山峰。 地图表示为一维数组&#xff0c;数组的索引代表水平位置&#xff0c;数组的元素代表相对海拔高度。其中数组元素0代表地面。 例如&#xff1a;[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0]&#xff0c;代表如下…

Github 2024-02-14 开源项目日报 Top9

根据Github Trendings的统计&#xff0c;今日(2024-02-14统计)共有9个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Rust项目4TypeScript项目1PowerShell项目1Java项目1JavaScript项目1Jupyter Notebook项目1非开发语言项目1Pyth…

使用知识图谱来表示普通操作系统实时操作系统以及物联网操作系统

在计算机科学领域&#xff0c;操作系统&#xff08;Operating System&#xff0c;OS&#xff09;是一种至关重要的软件&#xff0c;它管理计算机硬件和软件资源&#xff0c;为用户和应用程序提供交互界面。操作系统有多种类型&#xff0c;包括普通操作系统、实时操作系统&#…