当前位置: 首页> 健康> 美食 > 创可贴在线设计网站_超变变态版传奇_seo如何提高排名_网络推广公司收费标准

创可贴在线设计网站_超变变态版传奇_seo如何提高排名_网络推广公司收费标准

时间:2025/7/11 10:59:43来源:https://blog.csdn.net/weixin_50993868/article/details/147305599 浏览次数:0次
创可贴在线设计网站_超变变态版传奇_seo如何提高排名_网络推广公司收费标准

C++ 的结构体(struct)和 C 语言的结构体,在语法和能力上是 有区别的。虽然看起来都叫 struct,但本质上:

C++ 的 struct 是“功能全面的小号 class”,而
C 的 struct 只能用于数据聚合(不能包含方法)


✅ 一张表看区别:C vs C++ 中 struct 的对比

功能点C 中的 structC++ 中的 struct
成员变量✅ 支持✅ 支持
成员函数❌ 不支持✅ 支持(可以有构造函数、方法等)
构造函数 / 析构函数❌ 不支持✅ 支持
默认访问权限全部 public默认 public(而 class 默认是 private
继承、多态、虚函数❌ 不支持✅ 支持(和 class 一样)
作用仅用于聚合数据类一样用于建模、行为封装

🔍 举个对比例子

🔸 C 语言结构体

// C 中的结构体只能定义字段(属性)
struct Point {int x;int y;
};// 不能写构造函数或成员函数

使用时:

struct Point p;
p.x = 1;
p.y = 2;

🔸 C++ 中的结构体

struct Point {int x, y;// 构造函数Point(int x, int y) : x(x), y(y) {}// 成员函数void print() {std::cout << "(" << x << ", " << y << ")" << std::endl;}
};

使用:

Point p(3, 4);
p.print(); // 输出: (3, 4)

✅ C++ 中的 struct 就和 class 几乎没区别,只是默认权限是 public


✅ 总结区别重点

特性C structC++ struct
功能范围仅变量变量 + 构造函数 + 方法 + 继承
用途数据结构类功能完整,只是语法习惯不同
和 class 的差别N/A只有默认权限不同(struct: public,class: private)

🚀 快速记忆法:

C 的 struct 就是 “装数据的盒子
C++ 的 struct 是 “开了全部特权的 class


🧠 用 C 风格 struct + 函数,模拟 C++ 类的面向对象

目标:我们做一个简单的「点(Point)」结构,能进行打印、平移操作。


✅ 1. C++ 面向对象写法(类/struct 封装 + 方法)

// C++ 实现:面向对象
#include <iostream>
using namespace std;struct Point {int x, y;// 构造函数Point(int x, int y) : x(x), y(y) {}// 打印函数void print() {cout << "Point(" << x << ", " << y << ")" << endl;}// 移动坐标void move(int dx, int dy) {x += dx;y += dy;}
};int main() {Point p(1, 2);p.print();p.move(3, 4);p.print();return 0;
}

✅ 2. C 语言模拟面向对象(结构体 + 外部函数)

// C 实现:函数 + struct 模拟面向对象
#include <stdio.h>// 结构体定义
typedef struct {int x;int y;
} Point;// 相当于“方法”的函数
void Point_init(Point* p, int x, int y) {p->x = x;p->y = y;
}void Point_print(const Point* p) {printf("Point(%d, %d)\n", p->x, p->y);
}void Point_move(Point* p, int dx, int dy) {p->x += dx;p->y += dy;
}int main() {Point p;Point_init(&p, 1, 2);Point_print(&p);Point_move(&p, 3, 4);Point_print(&p);return 0;
}

🔍 对比分析

特性C++ 类方式C 模拟方式
构造函数Point(x, y)Point_init(&p, x, y)
成员方法调用p.move(1, 2)Point_move(&p, 1, 2)
封装性内部函数和成员耦合分离,手动管理
可读性✅ 高(面向对象)❌ 函数名重复繁琐
灵活性✅ 支持继承、多态❌ 靠人为规范

✅ 总结一句话:

C 是手动“模拟”类的行为,C++ 是语言级支持类的机制
如果你用 C 写模块化代码,常常会这样“结构体 + 函数 + 前缀命名”,来模拟类的封装。


你问得非常好,这个问题属于 C语言底层知识点,经常在面试 & 源码分析中出现。


关键字:创可贴在线设计网站_超变变态版传奇_seo如何提高排名_网络推广公司收费标准

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: