IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C和C++结构体的区别 -> 正文阅读

[C++知识库]C和C++结构体的区别

博客文章: https://blog.manchan.top/post/Differences-between-C-and-Cpp-structures/可在此处找到我

引言

在很大程度上,C++是C的超集,这意味着一个有效的C程序也是一个有效的C++程序。C和C++的主要区别是,C++支持许多附加特性。但是,C++中有许多规则与 C 稍有不同。这些不同使得 C 程序作为C++程序编译时可能以不同的方式运行或根本不能运行。如果使用C++的编译器编译C程序,就知道这些不同之处。

异同点

声明一个有标记的结构或联合后,就可以在C++中使用这个标记作为类型名:

struct duo
{
    int a;
    int b;
};
struct duo m; /* C和C++都可以 */
duo n; /* C不可以,C++可以*/

结果是结构名会与变量名冲突。例如,下面的程序可作为C程序编译,但是作为C++程序编译时会失败。因为C++把printf()语句中的duo解释成结构类型而不是外部变量:

#include <stdio.h>
float duo = 100.3;
int main(void)
{
    struct duo
    {
        int a;
        int b;
    };
    struct duo y = {2, 4};
    printf("%f\n", duo); /* 在C中没问题,但是在C++不行 */
    return 0;
}

在C和C++中,都可以在一个结构的内部声明另一个结构:

struct box
{
    struct point
    {
        int x;
        int y;
    } upperleft;
    struct point lowerright;
};

在C中,随后可以使用任意使用这些结构,但是在C++中使用嵌套结构时要使用一个特殊的符号:

struct box ad;    /* C和 C++都可以 */
struct point dot;   /* C可以,C++不行 */
box::point dot;    /* C不行,C++可以 */

C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。

struct Point 
{
    int x;
    int y;
    Point *next;
    Point()/* C不行,C++可以 */
    {
        next = NULL;
        x = 0;
        y = 0;
    }//变量初始化函数
};

在C中,直接初始化结构数据成员是不可行的,但可以在C ++中完成。

struct Point 
{
    int x = 0, y = 0;//仅c++可在结构体定义内初始化
    Point *next = NULL;
    void print();
};

利用typedef

在C语言中使用typedef可以在定义变量上达到与C++类似的效果。

如下面在《数据结构》中常用的定义链表的语句,为了同时兼容C和C++,利用typedef将结构体声明语句取一个别名(即Nodestruct Node的别名),并设置与结构体与同名,达到C++直接定义变量的效果。

typedef struct Node
{
    int data;
    struct Node *next;
} Node;
Node list;

而去掉typedef后,下面的语句是直接定义了一个名为Node的变量。

struct Node
{
    int data;
    struct Node *next;
} Node;
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章           查看所有文章
加:2021-08-22 13:21:43  更:2021-08-22 13:24:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 5:31:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计