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

 更新时间:2025年10月14日 09:06:13   作者:帅气小胖子  
C++中的结构体是一种特殊的用户自定义数据类型,它不仅包括数据成员,还可以包括成员函数,并支持继承、多态等面向对象特性,是C语言中结构体的超集,与C++中的类基本相似,主要区别在于默认的访问权限和继承方式

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 继承

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • 基于C/C++ 常见误区详解

    基于C/C++ 常见误区详解

    本篇文章介绍了在c和c++中一些常见误区的详细概述。需要的朋友参考下
    2013-05-05
  • C++成员解除引用运算符的示例详解

    C++成员解除引用运算符的示例详解

    这篇文章主要介绍了C++成员解除引用运算符,本例子在编译期间给指针赋值,在更为复杂的类中,可以使用指向数据成员和方法的成员指针,需要的朋友可以参考下
    2022-01-01
  • C++控制台循环链表实现贪吃蛇

    C++控制台循环链表实现贪吃蛇

    这篇文章主要为大家详细介绍了C++控制台循环链表实现贪吃蛇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C语言接口与实现方法实例详解

    C语言接口与实现方法实例详解

    这篇文章主要介绍了C语言接口与实现方法,包括接口的概念、实现方法及抽象数据类型等,并配合实例予以说明,需要的朋友可以参考下
    2014-09-09
  • C++ vector操作实现

    C++ vector操作实现

    这篇文章主要介绍了C++ vector操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • C指针原理教程之C内嵌汇编

    C指针原理教程之C内嵌汇编

    在学习 C 语言内嵌汇编的实验过程中,发现内嵌汇编极容易造成段错误。
    2019-02-02
  • c语言循环加数组实现汉诺塔问题

    c语言循环加数组实现汉诺塔问题

    本文主要介绍了c语言循环加数组实现汉诺塔问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 在Qt中使用QString进行字符串截取的多种方法

    在Qt中使用QString进行字符串截取的多种方法

    本文详细介绍了在Qt中使用QString进行字符串截取的多种方法:left()和right()分别用于截取字符串的左右指定长度子串;mid()支持从任意位置截取;section()通过分隔符提取特定区段;chopped()可快速移除末尾字符,文章通过代码示例展示了各方法的用法
    2026-01-01
  • VC中LINK 2001 和 LINK 2009 的错误的解决方法

    VC中LINK 2001 和 LINK 2009 的错误的解决方法

    最近将两个开源C++项目编译成windows版本的时候遇到很多问题,编译的时候总是报错,报的最多的是无法解析的外部符号”,经过近3天的折腾总算都通过了,这里是一些总结
    2020-10-10
  • 将正小数转化为2-9进制小数的实现方法

    将正小数转化为2-9进制小数的实现方法

    本篇文章对正小数转化为2-9进制小数的实现方法进行了介绍,需要的朋友参考下
    2013-05-05

最新评论