在完成我的C++类之后,在我看来,结构/类几乎完全相同,除了一些细微的差别.
我以前从未用C语言编程; 但我确实知道它有结构.在C中是否可以继承其他结构并设置公共/私有的修饰符?
如果你能在常规C中做到这一点,为什么我们需要C++?是什么让类与结构不同?
Ant*_*sky 141
在C++中,结构和类几乎相同; 唯一的区别是,类中的访问修饰符(对于成员变量,方法和基类)默认为private,结构中的访问修饰符默认为public.
但是,在C中,struct只是(公共)数据的聚合集合,并且没有其他类的特性:没有方法,没有构造函数,没有基类等.虽然C++继承了关键字,但它扩展了语义.(但是,这就是为什么在结构中默认为public的原因 - 像C结构一样编写的结构就像一个结构.)
虽然可以在C中伪造一些OOP,例如,定义所有将指向结构的指针作为其第一个参数的函数,或偶尔使用相同的前几个字段强制转换为"sub/superclasses"的结构 - 总是排序狂奔,并不是真正的语言的一部分.
Lan*_*uck 14
其他即默认访问(公共/私有)的差异,没有区别.
但是,一些使用C和C++编写代码的商店将使用"class/struct"来表示哪些可用于C和C++(struct),哪些只能用于C++(类).换句话说,在这种风格中,所有结构必须使用C和C++.这就是为什么很久以前第一个地方存在差异,当时C++仍然被称为"C with Classes".
请注意,C联合使用C++,但不是相反.例如
union WorksWithCppOnly{
WorksWithCppOnly():a(0){}
friend class FloatAccessor;
int a;
private:
float b;
};
Run Code Online (Sandbox Code Playgroud)
同样地
typedef union friend{
int a;
float b;
} class;
Run Code Online (Sandbox Code Playgroud)
仅适用于C
在C中无法定义成员函数或从彼此派生结构.
此外,C++不仅仅是C +"派生结构".C中不存在模板,引用,用户定义的命名空间和运算符重载.
我将添加现有的答案,因为现代C++现在已成为一种东西,并且已经创建了官方核心指南来帮助解决这些问题.
以下是指南中的相关部分:
C.2:如果类具有不变量,则使用类; 如果数据成员可以独立变化,请使用struct
不变量是构造函数必须为公共成员函数设置的对象成员的逻辑条件.在建立不变量之后(通常由构造函数),可以为对象调用每个成员函数.可以非正式地(例如,在评论中)或更正式地使用期望来陈述不变量.
如果所有数据成员可以彼此独立地变化,则不可能存在不变量.
如果类具有任何私有数据,则用户无法在不使用构造函数的情况下完全初始化对象.因此,类定义器将提供构造函数并且必须指定其含义.这实际上意味着定义者需要定义一个不变量.
强制
查找所有数据私有的结构和具有公共成员的类.
给出的代码示例:
struct Pair { // the members can vary independently
string name;
int volume;
};
// but
class Date {
public:
// validate that {yy, mm, dd} is a valid date and initialize
Date(int yy, Month mm, char dd);
// ...
private:
int y;
Month m;
char d; // day
};
Run Code Online (Sandbox Code Playgroud)
Class例如,彼此派生或相互关联的成员可以很好地工作.他们还可以在实例化时帮助进行健全性检查.Struct对于拥有"数据包"的工作做得很好,其中没有什么特别的东西真正发生,但成员在逻辑上有意义地组合在一起.
从这一点来看,class有必要支持封装和其他相关的编码概念,这些概念struct根本不是很有用.
| 归档时间: |
|
| 查看次数: |
91386 次 |
| 最近记录: |