c++中结构体与类、容器的区别

结构体(struct):用于组合不同类型的数据成员的用户自定义数据类型,允许在一个单一的实体中存储多个不同类型的数据,并且可以根据需要自定义数据成员的布局和访问权限。
声明结构体:可以在头文件中声明或者在全局命名空间中,以便在多个地方都可以使用。

struct Person {
    std::string name;
    int age;
    double height;
};

在结构体中可以定义不同类型的成员变量,这些变量称为数据成员。可以是基本数据类型,自定义数据类型,指针,数组等。

struct Rectangle {
    double width;
    double height;
};

struct Student {
    std::string name;
    int age;
    double grades[5];
    Rectangle favoriteRectangle;
};

结构体的默认访问权限是public,直接访问。但是也可以设置访问权限,如:

struct Example {
    int publicMember;    // 默认是public
private:
    int privateMember;
public:
    void setPrivateMember(int value) {
        privateMember = value;
    }
    int getPrivateMember() {
        return privateMember;
    }
};

结构体也可以拥有成员函数,但他们的使用通常是限于简单的操作,而不是丰富的行为。可以内部声明和定义,可以访问结构体的数据成员。
总之,对于简单的数据封装和轻量级的数据结构,结构体是一个很好的选择。

c++中的类(Class):用于创建用户自定义的数据类型,可包含数据成员和成员函数,实现数据的封装和操作,允许将数据和操作封装在一起。
类可以在头文件中声明,但是类的成员函数的定义可以是在.cpp文件中(构造函数),在类中可以只是声明一个成员函数。

Person::Person(const std::string &n, int a) : name(n), age(a) {}

:name(n),age(a)这是成员初始化列表,用于初始化类的成员变量,用传入的两个参数来初始化类的两个成员变量。
类可以有构造函数用于初始化对象,析构函数用于在对象被销毁的时候进行清理工作,构造函数可以有参数,但是没有返回值。
类的声明:

// Person.h
class Person {
private:
    std::string name;
    int age;
    
public:
    Person(const std::string &n, int a);
    void displayInfo();
};

类的定义:

// Person.cpp
#include "Person.h"

Person::Person(const std::string &n, int a) : name(n), age(a) {}

void Person::displayInfo() {
    std::cout << "Name: " << name << ", Age: " << age << std::endl;
}

对象实体化:通过类的构造函数,可以实现创建类的对象实例

Person person1("Alice", 25);
Circle circle1(5.0);

类最重要的是继承:支持继承和多态,允许基类创建派生类。

class Shape {
public:
    virtual double calculateArea();
};

class Rectangle : public Shape {
private:
    double width;
    double height;

public:
    Rectangle(double w, double h);
    double calculateArea() override;
};

虚函数关键字virtual:可以在派生类中进行重写。
重写关键字override:可以对基类函数的重写,实现多态。

容器(vetcor):是一种用于存储和组织数据的数据结构,可以容纳一组元素,并提供了各种操作和算法来操作这些元素。
容器可以存储相同类型或者不同类型的元素,具有动态大小,可以动态的增删改查元素。
容器提供了丰富的成员函数和迭代器来操作元素。

结构体与类的区别:
1.结构体成员默认的访问权限是公共的,但是类的默认访问权限是私有的。
2.结构体的成员函数主要适用于实现一些操作,但是类的成员函数是用于操作类的成员变量的,实现类的行为和功能。
3.结构体继承默认是公共的,可能导致访问权限问题,但是类的继承可以选择公共、私有、保护继承来控制成员的访问权限。
4.类拥有构造函数和析构函数,用于对象的初始化和清理,结构体也可以有构造函数和析构函数,但是他们的使用场景通常是比较简单的数据封装。
5.结构体无法设置成员变量的访问权限,默认是公共的。
6.使用场景:
结构体:
(1)用于储存一组相关的数据,但是没有复杂的操作和逻辑。
(2)数据的封装比行为更重要。
(3)可以作为轻量级的数据容器。
类:
(1)需要对数据进行封装并赋予行为操作,更加合适。
(2)面向对象,需要继承、多态来扩展和重用。
(3)更加复杂的数据结构。
容器:主要关注于对数据的存储和操作,但是它提供了丰富的迭代器和算法来对存储的数据进行操作。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

展开说说:Android Fragment完全解析-卷三

本文章分析了Fragment的管理器FragmentManager、事务FragmentTransaction 、以及完整的声明周期和动态加载Fragment的原理解析。 1、Fragment管理器 FragmentManager 类负责在应用的 fragment 上执行一些操作&#xff0c;如添加、移除或替换操作&#xff0c;以及将操作添加到…

介绍BCD码

BCD码&#xff08;Binary-Coded Decimal‎&#xff09;&#xff0c;用4位 二进制数 来表示1位 十进制数 中的0~9这10个数码&#xff0c;是一种二进制的数字编码形式&#xff0c;用 二进制编码的十进制 代码。 BCD码这种编码形式利用了四个位元来储存一个十进制的数码&#xff0…

关于莫比乌斯变换属性梳理

文章目录 一、说明二、多视角看莫比乌斯变换2.1 从几何角度2.2 复分析中的莫比乌斯变换2.3 莫比乌斯变换运算组合2.4 莫比乌斯变换的不动点2.5 三个点决定一个莫比乌斯变换2.6 交叉比2.7 莫比乌斯变换的逆变换 三 莫比乌斯变换性质证明3.1 证明1&#xff1a;莫比乌斯变换将圆变…

最新SpringBoot项目地方废物回收机构管理系统

采用技术 最新SpringBoot项目地方废物回收机构管理系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 登录页面 后端管理员 管理员首页 员工管理 设…

微星主板安装双系统不能进入Ubuntu的解决办法

在微星主板的台式机上面依次安装了Windows11和Ubuntu22.04。在Ubuntu安装完成后重启&#xff0c;没有出现系统选择界面&#xff0c;直接进入了Windows11。怎么解决&#xff1f;方法如下&#xff1a; &#xff08;1&#xff09;正常安装Windows11 &#xff08;2&#xff09;安…

基于php+mysql+html简单图书管理系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、Php、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

需求规格说明书编制书(word原件)

1 范围 1.1 系统概述 1.2 文档概述 1.3 术语及缩略语 2 引用文档 3 需求 3.1 要求的状态和方式 3.2 系统能力需求 3.3 系统外部接口需求 3.3.1 管理接口 3.3.2 业务接口 3.4 系统内部接口需求 3.5 系统内部数据需求 3.6 适应性需求 3.7 安全性需求 3.8 保密性需…

# IDEA 复制项目 Module 出现 不同模块下的 Product 类报错

IDEA 复制项目 Module 出现 不同模块下的 Product 类报错 我们 用 IDEA 复制项目 Module 出现 不同模块下的 Product 类报错&#xff0c;发现复制的 module 名称没有改变或者 java 文件夹后面还有原项目 source root 字样&#xff0c;maven 父子项目没有标识等问题。 解决方法…

二叉树四种遍历方法

目录 树基本概念 二叉树二叉树的五种形态特殊二叉树二叉链表创建四种遍历方法代码实现 树 树是一个n个节点的有限集&#xff0c;当n0时称之为空树 基本概念 性质 1. 树的定义是递归的&#xff0c;树的定义中又用到了自身 2. 树的根节点没有前驱&#xff0c;除根结点外&#x…

开了个新店!

大家好&#xff0c;我是麦鸽。 一言难尽&#xff0c;五一之前&#xff0c;把大A里的钱都提出来了&#xff0c;又整了一个新的小店。熟悉我的老读者应该都知道&#xff0c;我主业是做嵌入式的&#xff0c;后面慢慢转了技术管理的路线。平时也搞点副业&#xff0c;餐饮店就是其中…

关于链表带环问题为什么要用快慢指针

判断链表是否带环 题目描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连…

定制开发AI名片商城AI导购系统:引领营销自动化的新时代

在数字营销日新月异的今天&#xff0c;一个革命性的工具——定制开发AI名片商城AI导购系统&#xff0c;正逐渐崭露头角&#xff0c;成为企业私域运营中的得力助手。它不仅仅是一个营销工具&#xff0c;更是一个拥有强大营销自动化能力和先进算法技术的在线助理&#xff0c;为企…

Ubuntu 域名解析出现暂时性错误

Ubuntu 域名解析出现暂时性错误 问题描述解决方案 问题描述 由于在Ubuntu系统里面经常切换网络导致&#xff0c;系统一直处于有线网络连接但是没网状态&#xff0c;尝试ping网络也无法完成&#xff0c;尝试了很多方法均不能解决 解决方案 点击”虚拟机“ 按照要求设置好即可…

Java | Spring框架 | BeanFactory与ApplicationContext

Spring容器&#xff1a;BeanFactory与ApplicationContext Spring容器是Spring框架的核心&#xff0c;负责实例化、配置和组装Bean。 Spring容器有两种主要类型&#xff1a;BeanFactory和ApplicationContext。 一、BeanFactory 基本功能&#xff1a;BeanFactory是Spring框架…

【数据库原理及应用】期末复习汇总高校期末真题试卷02

试卷 一、填空题 数据库系统是指计算机系统中引入数据库后的系统&#xff0c;一般由数据库、________、应用系统、数据库管理员和用户构成。当数据库的存储结构发生了改变&#xff0c;由数据库管理员对________映象作相应改变&#xff0c;可以使________保持不变&#xff0c;…

牛客热题:两个链表的第一个公共节点

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;两个链表的第一个公共节点题目链…

目标检测算法YOLOv5简介

没有关于YOLOv5的直接论文&#xff0c;YOLOv5由Ultralytics维护&#xff0c;源码见&#xff1a;https://github.com/ultralytics/yolov5 &#xff0c;于2020年6月发布v1.0版本&#xff0c;最新发布版本为v7.0&#xff0c;License为AGPL-3.0. 以下内容主要来自&#xff1a; 1. U…

STM32的TIM输入捕获和PWMI详解

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 文章目录 1. IC输入捕获 2. 频率测量 3. 主模式、从模式、触发源选择 4. 输入捕获基本结构 5. PWMI模式 6. 代码示例 6.1 PWM.c 6.2 PWM.h 6.3 IC.c 6.4 IC.h 6.5 完整工程文件 输出比较可以看下面这篇…

ORAN C平面优化

使用section扩展6的C平面优化 在时域和频域中&#xff0c;都可以使用section扩展6进行非连续PRB分配。Section扩展6有两个位掩码&#xff1a;symbolMask和rbgMask。使用symbolMask可以选择一个slot内任意的symbol子集。使用rbgMask可以选择startPrbc和&#xff08;startPrbc …

Android版本依赖Version catalog

曾经我们使用config.gradle文件进行版本依赖配置&#xff0c;然后在project的build.gradle.kts中使用如下方式引入&#xff1a; apply(from "./config.gradle") 缺点&#xff1a;在project的module中引用无任何提示&#xff0c;无法跳转到指定引用 一、创建versio…
最新文章