结构与阶级

时间:2012-06-20 11:51:01

标签: c++

今天,我很想在C ++中找到结构和类之间的一些差异。所以,我发现了一些不同之处:

  1. 在结构中,默认情况下,成员在公共时是私有的。
  2. 默认情况下,结构的继承是公共的,而类的情况下是私有的。
  3. 类可以参与模板,而结构则不能。
  4. 点击此处查看结构,如果模板,则无法使用结构 http://ideone.com/p5G57

    template<struct T> void fun(T i)
    {
        cout<<i<<endl;
    }
    
    int main()
    {
        int i=10;
        fun<int>(i);
        return 0;
    }
    

    它给出了错误:

    prog.cpp:4: error: ‘struct T’ is not a valid type for a template constant parameter
    prog.cpp: In function ‘void fun(T)’:
    prog.cpp:4: error: ‘i’ has incomplete type
    prog.cpp:4: error: forward declaration of ‘struct T’
    prog.cpp: In function ‘int main()’:
    prog.cpp:12: error: no matching function for call to ‘fun(int&)’
    

    但是,如果 struct 替换为,则效果非常好。见这里:http://ideone.com/K8bFn

    除了上述差异之外,当我在代码中使用class替换struct时,代码可以完美运行而无需进行任何进一步更改。

    现在,我想知道,是否存在更多差异,我错过了,我应该知道?

3 个答案:

答案 0 :(得分:27)

没有其他区别,您指定的第三个不正确:

  

类可以参与模板,而结构则不能。

对于模板,class关键字只是语法糖,并不意味着类型必须是实际的类。通常,程序员更喜欢typename用于基本类型,而class用于类或结构,但这只是按惯例。

除此之外,您可以同时使用classstruct来专门化模板。

答案 1 :(得分:4)

主要有两点不同:

  • 如果缺少基类class的访问说明符,则在声明派生类struct时假定为public,并在声明类时假定为private。

  • 默认情况下,使用关键字class定义的类的成员是私有的。默认情况下,使用关键字structunion定义的班级成员是公开的。

答案 2 :(得分:1)

结构只是一个默认情况下公开所有成员的类。

根据C ++编程语言(第3版),第10.2.8节:

  

根据定义,struct是默认情况下成员的类   上市;

struct s{ ...
     

只是

的简写
class s { public: ...

然后他继续说:

  

我通常更喜欢将struct用于公开所有数据的类。   我认为这类“不太合适,只是数据   结构“。

根据评论编辑

在第15.3.2节中,它说:

  

可以省略基类的访问说明符。在这种情况下,   基本默认为的私有基础和公共基础   对于 struct