目录
- 01-定义类成员的访问权限属性:public 、protected 、private
- 1. **`public` 成员**
- 2. **`protected` 成员**
- 3. **`private` 成员**
- 总结对比
- 使用建议
- 02-定义一个类的基类中各成员的属性
01-定义类成员的访问权限属性:public 、protected 、private
C++类的成员有三种属性,分别是public 、protected 、private ,请分别介绍下。
在C++中,类的成员(包括数据成员和成员函数)可以具有三种访问权限:public
、protected
和 private
。这些访问权限决定了类成员在类内部、派生类以及类外部的可见性和可访问性。
1. public
成员
- 访问权限:
- 在类内部可以访问。
- 在派生类中可以访问。
- 在类外部(通过对象)可以访问。
- 用途:
- 用于定义类的接口,即类对外提供的功能。
- 通常将成员函数(尤其是类的构造函数和公共方法)声明为
public
,以便外部代码可以调用。
- 示例:
class MyClass { public:int publicVar; // 公有成员变量void publicFunc() { // 公有成员函数std::cout << "Public Function\n";} };int main() {MyClass obj;obj.publicVar = 10; // 可以直接访问obj.publicFunc(); // 可以直接调用return 0; }
2. protected
成员
- 访问权限:
- 在类内部可以访问。
- 在派生类中可以访问。
- 在类外部(通过对象)不能访问。
- 用途:
- 用于定义类的实现细节,这些细节需要被派生类继承和使用,但不希望暴露给外部代码。
- 通常将需要被派生类访问的成员变量或成员函数声明为
protected
。
- 示例:
class Base { protected:int protectedVar; // 受保护成员变量 };class Derived : public Base { public:void accessProtected() {protectedVar = 20; // 可以在派生类中访问} };int main() {Derived obj;// obj.protectedVar = 30; // 错误:不能在类外部访问 protected 成员obj.accessProtected(); // 可以通过公有方法间接访问return 0; }
3. private
成员
- 访问权限:
- 在类内部可以访问。
- 在派生类中不能访问。
- 在类外部(通过对象)不能访问。
- 用途:
- 用于隐藏类的实现细节,确保这些细节不会被外部代码或派生类直接访问或修改。
- 通常将类的内部状态或辅助函数声明为
private
。
- 示例:
class MyClass { private:int privateVar; // 私有成员变量void privateFunc() { // 私有成员函数std::cout << "Private Function\n";} public:void setPrivateVar(int value) {privateVar = value; // 可以在类内部访问私有成员privateFunc(); // 可以在类内部调用私有函数} };int main() {MyClass obj;// obj.privateVar = 10; // 错误:不能在类外部访问 private 成员// obj.privateFunc(); // 错误:不能在类外部调用 private 函数obj.setPrivateVar(10); // 可以通过公有方法间接访问return 0; }
总结对比
访问权限 | 类内部 | 派生类 | 类外部 |
---|---|---|---|
public | ✔️ | ✔️ | ✔️ |
protected | ✔️ | ✔️ | ❌ |
private | ✔️ | ❌ | ❌ |
使用建议
public
:用于定义类的接口,供外部代码使用。protected
:用于定义类的实现细节,供派生类使用。private
:用于隐藏类的内部实现,确保封装性。
通过合理使用这三种访问权限,可以实现良好的封装性和代码的可维护性。
02-定义一个类的基类中各成员的属性
在C++中,public Base
中的public
关键字表示继承方式,具体来说,它决定了基类(Base
)中的成员在派生类(Derived
)中的访问权限。
继承方式有三种:
-
public
继承:- 基类的
public
成员在派生类中仍然是public
。 - 基类的
protected
成员在派生类中仍然是protected
。 - 基类的
private
成员在派生类中不可访问。 - 这是最常用的继承方式,表示派生类“是一个”基类(is-a 关系)。
- 基类的
-
protected
继承:- 基类的
public
和protected
成员在派生类中都变为protected
。 - 基类的
private
成员在派生类中不可访问。 - 这种继承方式较少使用,通常用于限制派生类的外部访问。
- 基类的
-
private
继承:- 基类的
public
和protected
成员在派生类中都变为private
。 - 基类的
private
成员在派生类中不可访问。 - 这种继承方式表示派生类“根据基类实现”(implemented-in-terms-of 关系),而不是“是一个”基类。
- 基类的