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

时间:2011-09-01 23:41:00

标签: c++

  

可能重复:
  What are the differences between struct and class in C++

我正在查看某个结构的头文件,但看起来函数是这个结构的一部分......那么这是一个类,但是如何弃绝?还是用?

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 
        );
};

4 个答案:

答案 0 :(得分:3)

在C ++中,classstruct是相同的,除了前者的默认访问说明符是private,而后者的默认访问说明符是public

class Base { /* .. */ };

class Foo : Base
{
  int i;
};

struct Bar : Base
{
  int i;
};

在上面的代码中,FooBase私下继承,而Bar则公开。同样,Foo::i是私有的,而Bar::i是公开的。请注意,i在两种情况下的可见性与继承无关,即使FooBar未从Base继承,它也是相同的。< / p>

除了这些差异之外,你可以用一个做一切,你也可以做另一个。

答案 1 :(得分:0)

在C ++中,classstruct之间唯一有意义的区别是class的变量和函数默认是私有的,而struct的变量和函数是私有的默认情况下公开。

答案 2 :(得分:0)

默认情况下,所有子对象(成员和基础)在使用class关键字时都是私有的,默认情况下为public struct,并且都定义了类类型。

答案 3 :(得分:0)

功能结构是:

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

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

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

在某些情况下,即使在C ++中,结构仍然被使用,但我自己的偏好通常是使用“类”这个词,除非我特别希望我的所有数据成员都公开,这种情况偶尔发生在您只是将它们分组的情况下在一起。

发布的代码可能会受益于私有数据成员,以及const-correctness,并可能使虚拟方法变得抽象。还需要一个虚拟析构函数,因为它有虚拟方法。

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