整理我的C ++类在我看来,在结构后/类是除与一些细微的差别几乎相同。
我从来没有用C编程之前; 但我不知道它有结构。 在C是有可能继承其他结构和设置的公共/私人改性剂?
如果你能在普通的C做到这一点,为什么在世界上,我们需要C ++? 是什么让从结构不同类别?
整理我的C ++类在我看来,在结构后/类是除与一些细微的差别几乎相同。
我从来没有用C编程之前; 但我不知道它有结构。 在C是有可能继承其他结构和设置的公共/私人改性剂?
如果你能在普通的C做到这一点,为什么在世界上,我们需要C ++? 是什么让从结构不同类别?
在C ++中 ,结构和类是几乎相同的; 唯一不同的是,这里的访问修饰符(成员变量,方法和基类)中的类默认为私有,访问修饰符在结构默认为公众。
然而, 在C,一个结构是(公共)的数据只是一个集合收集,并且没有其他类状特征:没有方法,没有构造,没有基类等。虽然C ++继承了关键字,它扩展的语义。 (然而,这是为什么事情默认为公众结构,一个写的一个C结构结构的行为就像一个。)
虽然有可能假以C-例如,定义具有相同第一几个字段功能,这都需要一个指向结构作为他们的第一个参数,或者偶尔强迫结构是“子/超”一些OOP -它的排序总是在狂奔,也不是真正的语言的一部分。
其他,在默认访问的差异(公共/私人),没有任何区别。
然而,一些商店,在C和C ++代码将使用“类/结构”,以指示其可以在C和C ++(结构)一起使用的,哪些是C ++只是(类)。 换句话说,在这种风格的所有结构必须用C和C ++的工作。 这是怎么样的,为什么有是很久以前,回来时,C ++仍然被称为摆在首位的差异“与类的C”。
需要注意的是Ç工会与C ++的工作,而不是周围的其他方式。 例如
union WorksWithCppOnly{
WorksWithCppOnly():a(0){}
friend class FloatAccessor;
int a;
private:
float b;
};
同样地
typedef union friend{
int a;
float b;
} class;
只能用C
这不是可以定义成员函数或来自C.彼此派生结构
此外,C ++是不仅C +“派生结构”。 模板,引用,用户定义的命名空间和运算符重载所有不存在C.
我要添加到现有的答案,因为现代C ++是现在的事和官方核心准则已经建立,以帮助如下这些问题。
下面是来自准则相关部分:
C.2:如果类有一个不变的使用类; 使用结构,如果数据成员可以独立地改变
不变为一个对象,一个构造必须建立为公众成员函数来承担的成员的逻辑条件。 不变被建立(典型地通过一个构造)之后每个成员函数可以被调用的对象。 不变的非正式可以使用预期来说明(例如,在评论),或者更正式。
如果所有的数据成员可以彼此独立地变化,没有不变是可能的。
如果一个类有任何私人数据,用户也不能完全不使用构造函数初始化的对象。 因此,类别定义将提供一个构造函数,必须指定其含义。 这实际上意味着定义者需要限定不变。
强制
寻找与公共成员私人所有的数据和类结构。
该代码示例给出的:
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
};
Class
ES对于那些,例如,彼此相关或派生成员工作良好。 他们还可以帮助在实例健全检查。 Struct
的工作以及基于该“数据包”,其中没有什么特别的是真的,但对各成员在逻辑意义被组合在一起。
由此看来,这是有道理的class
ES存在支持封装等相关编码概念,即struct
s为根本不是非常有用的。
在C ++中还有一个区别,当你继承结构的一类,没有任何访问说明符,它成为公有继承,其中在课堂上的情况下,它是私有继承。
C ++使用主要用于1结构)使用C向后兼容性和2)POD类型。 C的结构没有方法,继承或知名度。