当前位置: 代码网 > it编程>编程语言>C/C++ > C++中的结构体使用及说明

C++中的结构体使用及说明

2025年10月14日 C/C++ 我要评论
c++中很特殊的一类自定义数据-结构体为什么说c++中的结构体特殊,因为它即不同于c中的结构体,基本和c++中的class也是不同的一、c++ 结构体(struct)简介在 c++ 中,struct是

c++中很特殊的一类自定义数据-结构体

为什么说c++中的结构体特殊,因为它即不同于c中的结构体,基本和c++中的class也是不同的

一、c++ 结构体(struct)简介

在 c++ 中,struct 是一种用户自定义的数据类型,它不仅可以包含数据成员(变量),还可以包含成员函数(方法),支持继承、多态等面向对象特性。(重点,需要记住)。

c++ 的 struct 是 c 语言 struct 的超集,同时也是一种特殊的类(class)。(这句话就很好的总结了c++中struct和c中struct的关系和c++中的class的关系)

二、c 语言中的结构体

在 c 语言 中,struct 仅用于聚合数据,不能包含成员函数,也不支持访问控制和继承。

示例(c 语言)

运行

#include <stdio.h>

struct point {
    int x;
    int y;
};

int main() {
    struct point p1 = {10, 20};
    printf("x = %d, y = %d\n", p1.x, p1.y);
    return 0;
}

特点

  • 只能包含数据成员
  • 所有成员默认为 public
  • 不能有成员函数
  • 不支持继承、多态
  • 声明变量时必须带 struct 关键字(除非用 typedef

三、c++ 中的结构体

c++ 保留了 c 语言 struct 的所有功能,同时增加了面向对象特性。

示例(c++ 结构体)

运行

#include <iostream>
using namespace std;

struct point {
    int x;
    int y;

    // 成员函数
    void print() {
        cout << "x = " << x << ", y = " << y << endl;
    }

    // 构造函数
    point(int a, int b) : x(a), y(b) {}
};

int main() {
    point p1(10, 20); // 直接创建对象
    p1.print();
    return 0;
}

特点

  1. 可以包含成员函数(方法)
  2. 支持构造函数析构函数
  3. 支持访问控制(public / private / protected)
  4. 支持继承
  5. 支持多态(虚函数)
  6. 默认访问权限为 public(与 class 不同)
  7. 默认继承方式为 public(与 class 不同)

四、c++ struct 与 c struct 的区别

特性c 语言 structc++ struct
成员类型只能是数据成员可以是数据成员 + 成员函数
访问控制无(默认为 public)支持 public /private/protected
构造函数不支持支持
继承不支持支持
多态(虚函数)不支持支持
使用 struct 关键字声明变量必须带 struct可直接用结构体名作为类型名
初始化仅支持聚合初始化支持聚合初始化 + 构造函数初始化

五、c++ struct 与 class 的区别

在 c++ 中,struct 和 class 几乎完全相同,唯一的区别在于默认访问权限默认继承方式

对比项structclass
默认成员访问权限publicprivate
默认继承方式publicprivate
其他特性完全一致(构造函数、析构函数、虚函数、模板等)完全一致

示例(默认访问权限差异)

运行

struct s {
    int a; // 默认 public
};

class c {
    int a; // 默认 private
};

int main() {
    s s;
    s.a = 10; // ok,public 成员

    c c;
    // c.a = 10; // 错误!a 是 private 成员
}

示例(默认继承方式差异)

运行

struct base {
    int x;
};

struct derived1 : base { };         // 默认 public 继承
class  derived2 : base { };         // 默认 private 继承

int main() {
    derived1 d1;
    d1.x = 10; // ok,public 继承

    derived2 d2;
    // d2.x = 10; // 错误!base::x 在 derived2 中是 private
}

六、使用建议

c++ struct 通常用于:

  1. 仅包含数据,没有或只有少量简单方法(类似 c 结构体的用途)
  2. 与 c 语言兼容的接口定义

c++ class 通常用于:

  1. 需要封装、继承、多态的复杂类型
  2. 强调数据隐藏和接口暴露的面向对象设计

 总结

c++ struct 是 c struct 的超集,增加了成员函数、访问控制、继承、多态等面向对象特性。

与 c++ class 的唯一区别在于默认访问权限默认继承方式

  • struct:默认 public 成员 & public 继承
  • class:默认 private 成员 & private 继承

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。 

(0)

相关文章:

  • 深入解析C++中的智能指针

    一、raii和智能指针raii是resource acquisition is initialization的缩写,它的意思是获取资源立即初始化。本质是⼀种利用对象生命周期来管理获…

    2025年10月19日 编程语言
  • C++构建缓存加速的实现示例

    C++构建缓存加速的实现示例

    1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value):查找第一个等于v... [阅读全文]
  • 详解C++中代理模式高级应用

    详解C++中代理模式高级应用

    1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value):查找第一个等于v... [阅读全文]
  • c++中类的对象初始化的实现示例

    c++中类的对象初始化的实现示例

    在 c++ 中,类的对象初始化是创建对象时为其成员变量赋予初始值的过程,核心依赖构造函数(类的特殊成员函数)。根据场景和需求,对象初始化有多种方式,下面详细介绍... [阅读全文]
  • 详解C++类型兼容性规则

    详解C++类型兼容性规则

    一个公有派生类的对象在使用上可以被当作基类的对象,反之则禁止。具体表现在:派生类的对象可以被赋值给基类对象。 派生类的对象可以初始化基类的引用。 指向基类的指针... [阅读全文]
  • C++中stack和queue的用法及说明

    前言在 c++ 中,stack(栈)和 queue(队列)是两种常用的容器适配器,分别用于管理数据的后进先出(lifo)和先进先出(fifo)访问模式。本文将详细介绍这两种数据结构…

    2025年10月10日 编程语言

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com