主要区别
-
默认访问修饰符:使用
struct
关键字定义的成员默认为公共(public
)访问权限,而使用class
关键字定义的成员默认为私有(private
)访问权限。这是最明显的区别之一。 -
继承方式:使用
struct
关键字定义的类默认为公共继承(public
inheritance),而使用class
关键字定义的类默认为私有继承(private
inheritance)。 -
类型别名:使用
struct
关键字定义的类可以通过直接声明一个对象来创建类型别名(与 C 兼容),而使用class
关键字定义的类则需要使用typedef
或using
声明别名。
public继承 和 private继承 的区别是什么?
公共继承(public inheritance):
- 基类的公共成员在派生类中仍然具有公共访问权限。
- 基类的保护成员在派生类中仍然具有保护访问权限。
- 基类的私有成员在派生类中不可直接访问。
- code
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
class DerivedPublic : public Base {
// 继承的成员在派生类中具有相同的访问权限
public:
void accessBaseMembers() {
publicMember = 10; // 可以访问基类的公共成员
protectedMember = 20; // 可以访问基类的保护成员
// privateMember = 30; // 不能直接访问基类的私有成员
}
};
-
私有继承(private inheritance):
- 基类的公共成员在派生类中变为私有成员。
- 基类的保护成员在派生类中仍然具有保护访问权限。
- ~~ 基类的私有成员在派生类中不可直接访问。~~
- code
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
class DerivedPrivate : private Base {
// 继承的成员在派生类中变为私有成员
public:
void accessBaseMembers() {
publicMember = 10; // 变为私有成员,无法访问
protectedMember = 20; // 可以访问基类的保护成员
// privateMember = 30; // 不能直接访问基类的私有成员
}
};