GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing notes.kamacoder.com — C++ struct与class的区别:默认访问权限、默认继承权限、POD类型、模板参数、工程选型惯例 # struct 与 class 的区别面试官问"struct 和 class 有什么区别",大多数人只答出"默认访问权限不同"就停了。但面试官往往会追问:继承时默认权限呢?模板参数里能用 struct 吗?实际项目中怎么选?能把这几层都答清楚,才算完整。 # 简要回答C++ 中 struct 和 class 在语法能力上完全等价,区别只有两个默认行为:struct 成员和继承默认 public,class 默认 private。另外模板参数只能用 # 详细回答语法层面的区别(只有三点) 第一,默认成员访问权限不同。 struct 的成员默认 public,外部可以直接访问;class 的成员默认 private,必须通过公开接口访问。但两者都可以显式写 第二,默认继承权限不同。 第三,模板参数声明。 工程惯例(非语法强制)
这个惯例不是编译器强制的,但团队代码风格一致性很重要——看到 struct 就知道"这是个透明的数据包",看到 class 就知道"这里有封装逻辑"。
# 知识拓展Q:struct 里能写 private 成员吗? 能。struct 和 class 语法能力完全一样,只是默认值不同。你可以在 struct 里写 private、写构造函数、写虚函数,编译器不会阻止。但这样做违反工程惯例,会让读代码的人困惑。 Q:什么是 POD 类型?和 struct 什么关系? POD(Plain Old Data)是指内存布局与 C 兼容的类型:没有虚函数、没有用户定义的构造/析构、所有成员 public、可以用 Q:C 的 struct 和 C++ 的 struct 有什么区别? C 的 struct 只能有成员变量,不能有成员函数、访问控制、继承。C++ 为了兼容保留了 struct 关键字,但扩展成了和 class 几乎等价的东西。用 Q:为什么实际项目中很少看到 struct 继承? 因为 struct 的语义是"纯数据聚合",继承暗示多态和行为扩展,两者语义冲突。如果需要继承体系,用 class 更符合意图表达。Google C++ Style Guide 明确建议:只有当所有成员都是 public 且没有虚函数时才用 struct。 ← 指针和引用的区别 结构体与联合体的区别 → 评论验证登录状态... |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |