C++ c++;代码:类或结构:难以理解

C++ c++;代码:类或结构:难以理解,c++,C++,可能重复: 我正在查看某个人的头文件的结构,但看起来函数是这个结构的一部分。。。那么这是一门课,但是如何禁欲呢?还是使用 struct Recording { FLAG mode; unsigned short intervals; unsigned short saved_cycles; virtual void SavetoFile( FILE *file,

可能重复:

我正在查看某个人的头文件的结构,但看起来函数是这个结构的一部分。。。那么这是一门课,但是如何禁欲呢?还是使用

struct Recording
{
    FLAG mode;  
    unsigned short intervals;   
      unsigned short saved_cycles;                                      
    virtual void SavetoFile( FILE *file, 
        bool Control, 
        PhaseData *__phaseData = NULL   
        );

    virtual bool LoadfromFile( FILE *file, 
        bool Control, 
        PhaseData *__phaseData = NULL 
        );
};

< C++ >代码>类< /COD>和结构> <代码>是相同的,除了前者的默认访问说明符是“代码>私下< /代码>,而对于后者则是代码>公共< /代码> .<
class Base { /* .. */ };

class Foo : Base
{
  int i;
};

struct Bar : Base
{
  int i;
};
在上面的代码中,
Foo
私下从
Base
继承,而
Bar
公开继承。类似地,
Foo::i
是私有的,而
Bar::i
是公共的。请注意,
i
在这两种情况下的可见性与继承无关,即即使
Foo
Bar
没有从
Base
继承,其可见性也是相同的


除了这些差异,你可以用一个方法做的任何事情,你也可以做其他的。

< P> > C++ >代码>类> <代码>和<代码>结构> <代码>是相同的,除了前者的默认访问说明符是“代码>私下< /代码>,而后者则是<代码>公共< /C>
class Base { /* .. */ };

class Foo : Base
{
  int i;
};

struct Bar : Base
{
  int i;
};
在上面的代码中,
Foo
私下从
Base
继承,而
Bar
公开继承。类似地,
Foo::i
是私有的,而
Bar::i
是公共的。请注意,
i
在这两种情况下的可见性与继承无关,即即使
Foo
Bar
没有从
Base
继承,其可见性也是相同的


<>除了这些差异之外,你可以用一个方法来做,也可以用另一个来做。

< p> C++中,<代码>类< /> >和<代码>结构> <代码>是默认的,<<代码>类< /C> >的变量和函数是私有的,而<<代码>结构> <代码>它们默认是公共的。在C++中,唯一的有意义的区别是:<代码>类<代码>和<代码>结构>代码>默认情况下,<<代码>类< /C> >的变量和函数是私有的,而<<代码>结构> <代码>默认情况下是公共的。p> 使用
class
关键字时,所有子对象(成员和基)默认为私有,使用
struct
时默认为公有,并且两者都定义了类类型。

使用
class
关键字时,所有子对象(成员和基)默认为私有,使用
struct
时默认为公有,两者都定义了类类型。

结构的特点是:

默认情况下,所有成员都是公共成员。 默认情况下,继承是公共的,即如果结构继承自类或结构,则它是公共的

对于一个类,默认情况下,上述两项都是私有的,即如果您没有指定其他项

关于数据成员,这使得它与C兼容(结构只有数据成员),这意味着您也可以在C++中使用C结构。

有时,即使在C++中,结构仍然被使用,但是我自己的偏好通常是使用“类”这个词,除非我特别希望所有的数据成员都是公共的,这是在你把它们简单地组合在一起的时候发生的。 发布的代码可能会受益于私有数据成员,以及常量的正确性,并可能使虚拟方法变得抽象。还需要一个虚拟析构函数,因为它有虚拟方法


此外,除非您正在实现“系统”,否则您不应使用以两个下划线开头的标识符。

这些功能包括:

默认情况下,所有成员都是公共成员。 默认情况下,继承是公共的,即如果结构继承自类或结构,则它是公共的

对于一个类,默认情况下,上述两项都是私有的,即如果您没有指定其他项

关于数据成员,这使得它与C兼容(结构只有数据成员),这意味着您也可以在C++中使用C结构。

有时,即使在C++中,结构仍然被使用,但是我自己的偏好通常是使用“类”这个词,除非我特别希望所有的数据成员都是公共的,这是在你把它们简单地组合在一起的时候发生的。 发布的代码可能会受益于私有数据成员,以及常量的正确性,并可能使虚拟方法变得抽象。还需要一个虚拟析构函数,因为它有虚拟方法


另外,你不应该使用标识符从两个下划线开始,除非你正在执行“系统”。< /P>一个结构是C++中的一个类——只是使用它和其他类一样。@ jdl:你是问这是一个类还是结构,还是你的问题“如何去弃权?还是使用?”你的意思是什么?这是什么意思?结构是C++中的一个类,只是像其他类一样使用它。@你问这是一个类还是结构,或者你的问题是“如何去弃权?还是用?”如果是后者,你是什么意思?这是什么意思?他们过去是非常不同的,但是随着时间的推移,它们变得几乎相同了。(关于C struct的)比我的简明版本更好的答案:)@Flyphe我不知道有任何这样的区别existed@FlypheC++中的<代码>结构>代码>与C中的<代码>结构> /代码>不一样,但是C++中的结构> <代码>,即POD(普通的旧数据,没有函数/构造器/构造的成员等)。与C+1中对应的

struct
兼容。感谢您澄清这一点:它们过去确实非常不同,但随着时间的推移,它们变得几乎相同了吗?(关于C struct的)比我的简明版本更好的答案:)@Flyphe我不知道有任何这样的区别existed@FlypheC++中的<代码>结构>代码>与C中的<代码>结构> /代码>不一样,但是C++中的<代码>结构> <代码>,即POD(普通的旧数据,没有函数/