C++ struct 和 class 的区别、C++结构体和C结构体的区别等基础知识。

特性C++ structC++ classC struct
默认访问控制符publicprivate全部公开
支持成员函数
继承支持
模板支持
运算符重载

在C++中,structclass 是两种非常相似的用户定义类型,二者有一些关键区别。C++的 struct 与 C 语言中的 struct 也存在一些差异,主要是因为 C++ 提供了面向对象编程的特性。

C++中 structclass 的区别

  1. 默认访问控制符不同

    • struct 默认的成员访问控制是 public
    • class 默认的成员访问控制是 private

    例如:

        struct MyStruct {
            int x; // 默认是public
        };

        class MyClass {
            int x; // 默认是private
        };

   2.继承的访问控制符不同

  • struct 默认的继承方式是 public 继承。
  • class 默认的继承方式是 private 继承。

例如:

        struct BaseStruct {};
        struct DerivedStruct : BaseStruct {};  // public继承

        class BaseClass {};
        class DerivedClass : BaseClass {};    // private继承

  1. 语义上的差别

    • 在设计层面上,class 通常用于表示 面向对象编程中的类,包含封装、继承和多态等特性。
    • struct 更常用于表示 简单的数据结构,虽然它也可以像 class 一样定义成员函数和继承关系。

C++ 结构体和 C 结构体的区别

  1. 成员函数

    • 在 C++ 中,struct 可以包含 成员函数构造函数析构函数,甚至支持 重载运算符。而在 C 语言中,struct 只能包含 数据成员

    例如:

// C++中的结构体
struct Point {
    int x, y;
    Point(int a, int b) : x(a), y(b) {}  // 构造函数
    void display() { 
        std::cout << "Point(" << x << ", " << y << ")\n"; 
    }
};

// C语言中的结构体
struct Point_C {
    int x, y;
};
 2.访问控制

  • C++ 中的 struct 可以使用访问控制符 public, private, 和 protected 来控制成员的访问权限,C 语言中的 struct 没有访问控制机制,所有成员都是 公开的

例如:

struct Point {
private:
    int x, y;
public:
    Point(int a, int b) : x(a), y(b) {}
    void display() { std::cout << x << ", " << y << "\n"; }
};

3.继承

  • 在 C++ 中,struct 可以支持继承,类似于类的继承关系。
  • C 语言中的 struct 不支持继承。

例如:

struct Base {
    int x;
};

struct Derived : Base {
    int y;
};

4.模板支持

  • C++ 中的 struct 可以与模板一起使用,而 C 语言中的 struct 不支持模板。

例如:

template <typename T>
struct Box {
    T value;
};

示例代码对比

C++ struct 示例

#include <iostream>
struct Point {
    int x, y;
    
    // 构造函数
    Point(int a, int b) : x(a), y(b) {}

    // 成员函数
    void display() {
        std::cout << "Point(" << x << ", " << y << ")\n";
    }
};

int main() {
    Point p(1, 2);
    p.display();
    return 0;
}

C 结构体示例

#include <stdio.h>

struct Point {
    int x, y;
};

int main() {
    struct Point p = {1, 2};
    printf("Point(%d, %d)\n", p.x, p.y);
    return 0;
}


 

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

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

相关文章

金九银十软件测试面试题(800道)

今年你的目标是拿下大厂offer&#xff1f;还是多少万年薪&#xff1f;其实这些都离不开日积月累的过程。 为此我特意整理出一份&#xff08;超详细笔记/面试题&#xff09;它几乎涵盖了所有的测试开发技术栈&#xff0c;非常珍贵&#xff0c;人手一份 肝完进大厂 妥妥的&#…

【LeetCode】动态规划—123. 买卖股票的最佳时机 III(附完整Python/C++代码)

动态规划—123. 买卖股票的最佳时机 III 题目描述前言基本思路1. 问题定义2. 理解问题和递推关系状态定义&#xff1a;状态转移公式&#xff1a;初始条件&#xff1a; 3. 解决方法动态规划方法伪代码&#xff1a; 4. 进一步优化5. 小总结 Python代码Python代码解释 C代码C代码解…

07_23 种设计模式之《桥接模式》

文章目录 一、桥接模式基础知识二、桥接模式实战应用 一、桥接模式基础知识 桥接模式定义&#xff1a;将抽象部分与它的实现部分分离&#xff0c;使它们都可以 独立地变化。桥接模式的结构图如下&#xff1a; Abstraction&#xff1a;抽象部分的接口。 RefinedAbstraction&…

Python基础之List列表用法

1、创建列表 names ["张三","李四","王五","Mary"] 2、列表分片 names[1]&#xff1a;获取数组的第2个元素。 names[1:3]&#xff1a;获取数组的第2、第3个元素。包含左侧&#xff0c;不包含右侧。 names[:3]等同于names[0:3]&…

List子接口

1.特点&#xff1a;有序&#xff0c;有下标&#xff0c;元素可以重复 2.方法&#xff1a;包含Collection中的所有方法&#xff0c;还包括自己的独有的方法&#xff08;API中查找&#xff09; 还有ListIterator&#xff08;迭代器&#xff09;&#xff0c;功能更强大。 包含更多…

llava1.5论文阅读

Improved Baselines with Visual Instruction Tuning 通过视觉指令微调增强的基线方法 论文摘要&#xff1a; 我们发现&#xff0c;LLaVA中的全连接视觉语言连接器非常强大且数据效率高。 3.3 数据和模型的scaling 受到将线性投影转变为多层感知机&#xff08;MLP&#xff0…

支付宝支付Java+uniapp支付宝小程序

JS&#xff1a; request.post(/vip/pay, {//这是自己写的java支付接口id: this.vipInfo.id,payWay: alipay-mini}).then((res) > {let success (res2) > {//前端的支付成功回调函数this.$refs.popup.close();// 支付成功刷新当前页面setTimeout(() > {this.doGetVipI…

机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+

时间序列在回归预测的领域的重要性&#xff0c;不言而喻&#xff0c;在数学建模中使用及其频繁&#xff0c;但是你真的了解ARIMA、AR、MA么&#xff1f;ACF图你会看么&#xff1f;&#xff1f; 时间序列数据如何构造&#xff1f;&#xff1f;&#xff1f;&#xff0c;我打过不少…

读书笔记 - 虚拟化技术 - 0 QEMU/KVM概述与历史

《QEMU/KVM源码解析与应用》 - 王强 概述 虚拟化简介 虚拟化思想 David Wheeler&#xff1a;计算机科学中任何问题都可以通过增加一个中间层来解决。 虚拟化思想存在与计算机科学的各个领域。 主要思想&#xff1a;通过分层将底层的复杂&#xff0c;难用的资源虚拟抽象为简…

32单片机 低功耗模式

以下是一个基于STM32的低功耗模式示例代码&#xff0c;展示如何将STM32微控制器置于低功耗模式&#xff0c;并在特定条件下唤醒它。这个示例使用的是STM32 HAL库。 ### 示例代码&#xff1a;进入睡眠模式并使用外部中断唤醒 c #include "stm32f4xx_hal.h" // 函数声明…

笔记本电脑按住电源键强行关机,对电脑有伤害吗?

电脑卡住了&#xff0c;我们习惯性地按住电源键或者直接拔掉电源强制关机&#xff0c;但这种做法真的安全吗&#xff1f;会不会对电脑造成伤害呢&#xff1f; 其实&#xff0c;按住电源键关机和直接拔掉电源关机是不一样的。它们在硬件层面有着本质区别。 按住电源键关机 当…

网络常用配置和运维命令以及使用方法

一、网络运维常见配置及命令 以下是一些整理简单网络常用配置和运维命令 1、ifconfig/ipconfig&#xff1a;查看和配置网络接口配置。 用法&#xff1a;ifconfig 或 ipconfig2、route/netstat -r&#xff1a;查看路由表。 用法&#xff1a;route -n 或 netstat -r3、netsta…

Spring Cloud 3.x 集成eureka快速入门Demo

1.什么是eureka&#xff1f; Eureka 由 Netflix 开发&#xff0c;是一种基于REST&#xff08;Representational State Transfer&#xff09;的服务&#xff0c;用于定位服务&#xff08;服务注册与发现&#xff09;&#xff0c;以实现中间层服务的负载均衡和故障转移&#xff…

工业和自动化领域常见的通信协议

在工业和自动化领域&#xff0c;有多种常见的通信协议&#xff0c;主要用于设备间的通信、数据传输和控制。 Modbus&#xff1a; 类型&#xff1a;串行通信协议用途&#xff1a;广泛用于工业自动化设备间的通信&#xff0c;如PLC、传感器和执行器。优点&#xff1a;简单、开放且…

day01-Qt5入门

day01-Qt5入门 窗体应用 1.1 窗体基类说明 创建项目在details中编辑器提供了三个基类&#xff0c;分别是 QMainWindows、Qwidget、QDialog 1、 QMainWindow QMainWindow 类提供一个有菜单条、锚接窗口&#xff08;例如工具条&#xff09;和一个状态条的主应用 程序窗口。…

【系统架构设计师】案例专题六(8大系统架构设计之1): 信息系统架构设计考点梳理

更多内容请见: 备考系统架构设计师-核心总结目录 文章目录 一、信息系统架构基本概念二、信息系统架构1、信息系统架构分类2、信息系统常用4种架构模型3、企业信息系统的总体框架三、信息系统架构设计方法1、ADM架构开发方法2、信息化总体架构方法3、TOGAF的目标、思想和组件四…

【C语言实现TCP客户端】

Question C语言实现TCP客户端 Answer 下面是一个简单的 C 语言实现的 TCP 客户端示例。这个客户端将连接到指定的服务器地址和端口&#xff0c;并发送一条消息&#xff0c;然后接收服务器返回的消息。 #include <stdio.h> #include <stdlib.h> #include <st…

Java-基础

1. 导入模块不能纯粹的复制粘贴&#xff0c;要从new里导入&#xff0c;因为前者建立不了关联 2. 数组 String[] name{"张三","李四","王五"};int[] numsnew int[]{1,2,3};//二维String[][] names{{"张三","李四"},{"…

RT-DETR改进策略:BackBone改进|CAFormer在RT-DETR中的创新应用,显著提升目标检测性能

摘要 在目标检测领域,模型性能的提升一直是研究者和开发者们关注的重点。近期,我们尝试将CAFormer模块引入RT-DETR模型中,以替换其原有的主干网络,这一创新性的改进带来了显著的性能提升。 CAFormer,作为MetaFormer框架下的一个变体,结合了深度可分离卷积和普通自注意力…

MATLAB - 机械臂手眼标定(眼在手内) - 估计安装在机器人上的移动相机的姿态

系列文章目录 前言 本示例展示了如何为装有手眼构型摄像头的机械臂或机械手执行和验证手眼校准。 一、概述 执行手眼校准有助于操作配备末端执行器&#xff08;简称 “手”&#xff09;的机械臂&#xff0c;该末端执行器依赖于摄像头提供的视觉数据。一旦完成了眼在手外的校准&…