浅谈c++中class与struct的差别

浅谈c++中class与struct的区别

本文主要讨论class与struct的区别。为什么是区别而不是共同点呢?因为在绝大部分情况下,class和struct其实是可以互相替换的,

那么区别到底有哪些呢,我总结了一下大概有如下3点:


1、成员的默认访问权限不同。如果我们使用struct关键字,则定义在第一个访问说明符之前的成员是public的;相反,如果我们使用class关键字,则这些成员是private的。

class A   //class
{
    int x;
public:
    A():x(0){}
};
struct B<span style="white-space:pre">	</span>//struct
{
    int x;
public:
    B():x(0){}
};
int main()
{
    A a;
    cout << a.x << endl;//class不可以
    B b;
    cout << b.x << endl;//struct可以
}


2、默认的继承保护级别不同。默认情况下,使用class关键字定义的派生类是私有继承的;而使用struct关键字定义的派生类是公有继承的。

class A
{
public:
    int x;
    A():x(0){}
};
class SonA:A{};
struct B
{
public:
    int x;
    B():x(0){}
};
struct SonB:B{};
int main()
{
    SonA a;
    cout << a.x << endl;//class不可以
    SonB b;
    cout << b.x << endl;//struct可以
}


3、在定义模板的时候只能使用class而不能用struct

template<class T> class A //可以
template<struct T> class B//不可以


除此之外,class与struct基本上用法就是相同的。在C++中,class的特性如成员函数、继承、虚函数等也能在struct上实现。

与此同时,可以参考《Inside The C++ Object Model》P15的内容和《C++primer》P546 所阐述的“ 人们常常有一种错觉,认为在使用struct关键字和class关键字定义的类之间还有更深层次的差别。事实上,唯一的差别就是默认成员访问说明符及默认派生访问说明符;除此之外,再无其他不同之处。”