标签:c++
本文主要讨论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关键字定义的类之间还有更深层次的差别。事实上,唯一的差别就是默认成员访问说明符及默认派生访问说明符;除此之外,再无其他不同之处。”
标签:c++
原文地址:http://blog.csdn.net/u014111471/article/details/46523449