在C++中,struct
和class
是两种用于定义数据类型的关键字。它们的主要区别在于默认的成员访问控制和默认继承类型。
成员访问控制:
在class
中,默认的成员访问控制是private
,意味着除了class
自身的函数外,其他函数都不能访问private
成员。而在struct
中,默认的成员访问控制是public
,意味着所有函数都可以访问struct
的成员。
下面是一个使用struct
和class
定义类的示例:
struct myStruct {
int a;
void foo();
};
class myClass {
int a;
void foo();
};
在这个例子中,myStruct
中的a
和foo()
函数是公共的,而myClass
中的a
和foo()
函数是私有的。
默认继承类型:
在class
中,默认的继承类型是private
,意味着派生类的成员函数不能访问基类的私有成员。而在struct
中,默认的继承类型是public
,意味着派生类的成员函数可以访问基类的公共成员。
下面是一个使用struct
和class
定义继承关系的示例:
struct BaseStruct {
int a;
};
struct DerivedStruct : BaseStruct {
void foo() { a = 10; }
};
class BaseClass {
int a;
};
class DerivedClass : BaseClass {
void foo() { a = 10; } // 编译错误,a是私有成员
};
在这个例子中,DerivedStruct
可以访问BaseStruct
中的a
,而DerivedClass
不能访问BaseClass
中的a
。
需要注意的是,除了以上区别,struct
和class
在语法上是相同的,可以拥有构造函数、析构函数、成员函数、静态成员等。在实际使用中,struct
通常用于定义简单的数据结构,而class
用于定义更复杂的对象。