一、struct关键字和class关键字的区别。
1、默认的访问权限不同:struct默认为public,class默认为private。
struct
A
{
unsigned
int
a
;
};
A
a
;
a
.
a
; //
编译通过。
class
A
{
unsigned
int
a
;
};
A
a
;
a
.
a
; // 编译失败
2、默认的继承权限不同:struct默认为public继承,class默认为private继承。
并且继承权限由子类决定,与父类的关键字无关。
class
A
{
public
:
unsigned
int
a
;
};
struct
B
:
A
{
unsigned
int
b
;
};
B
b
;
b
.
a
; // 编译通过
class
A
{
public
:
unsigned
int
a
;
};
class
B
:
A
{
unsigned
int
b
;
};
B
b
;
b
.
a
; // 编译失败
3、class可以用于定义模板参数,类似于typename。而struct不行。
template
<
class
T
> // 编译通过
class
A
{
T
a
;
};
template
<
struct
T
> // 编译失败
class
A
{
T
a
;
};
二、struct关键字会让程序看起来简洁一些。
struct关键字和class关键字除了上述的不同,其他地方基本可以互相替换。
因为struct是默认public访问和public继承的,所以很适合用于定义接口类。下面第一种写法看起来也比第二种简洁一些。
1、
struct
A
{
virtual
unsigned
int
getSize
() = 0;
virtual
~
A
(){};
};
struct
B
:
A
{
virtual
unsigned
int
getSize
(){
return
sizeof
(
struct
B
);}
};
2、
class
A
{
public
:
virtual
unsigned
int
getSize
() = 0;
virtual
~
A
(){};
};
class
B
:
public
A
{
public
:
virtual
unsigned
int
getSize
(){
return
sizeof
(
class
B
);}
};