C / C ++结构VS类C / C ++结构VS类(C/C++ Struct vs Class)

2019-05-10 10:12发布

整理我的C ++类在我看来,在结构后/类是除与一些细微的差别几乎相同。

我从来没有用C编程之前; 但我不知道它有结构。 在C是有可能继承其他结构和设置的公共/私人改性剂?

如果你能在普通的C做到这一点,为什么在世界上,我们需要C ++? 是什么让从结构不同类别?

Answer 1:

在C ++中 ,结构和类是几乎相同的; 唯一不同的是,这里的访问修饰符(成员变量,方法和基类)中的类默认为私有,访问修饰符在结构默认为公众。

然而, 在C,一个结构是(公共)的数据只是一个集合收集,并且没有其他类状特征:没有方法,没有构造,没有基类等。虽然C ++继承了关键字,它扩展的语义。 (然而,这是为什么事情默认为公众结构,一个写的一个C结构结构的行为就像一个。)

虽然有可能假以C-例如,定义具有相同第一几个字段功能,这都需要一个指向结构作为他们的第一个参数,或者偶尔强迫结构是“子/超”一些OOP -它的排序总是在狂奔,也不是真正的语言的一部分。



Answer 2:

其他,在默认访问的差异(公共/私人),没有任何区别。

然而,一些商店,在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



Answer 3:

这不是可以定义成员函数或来自C.彼此派生结构

此外,C ++是不仅C +“派生结构”。 模板,引用,用户定义的命名空间和运算符重载所有不存在C.



Answer 4:

我要添加到现有的答案,因为现代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为根本不是非常有用的。



Answer 5:

在C ++中还有一个区别,当你继承结构的一类,没有任何访问说明符,它成为公有继承,其中在课堂上的情况下,它是私有继承。



Answer 6:

C ++使用主要用于1结构)使用C向后兼容性和2)POD类型。 C的结构没有方法,继承或知名度。



文章来源: C/C++ Struct vs Class
标签: c++ class struct