C++封装

封装是面向对象编程的三大基本特性之一,是C++类的一个重要概念。本文将通过示例代码介绍C++中封装的相关知识。

一、封装的概念

封装指将对象的状态信息(成员变量)和行为(成员函数)打包归于类的内部,并可以根据需求选择性对外开放。

封装的优点:

  • 隐藏实现细节,只展示必要的接口
  • 可以修改实现而不影响使用
  • 提高安全性和可维护性

二、访问控制

C++通过访问控制实现封装:

  • public:公开访问
  • private:私有只能类内访问
  • protected:保护类型,Subclass可以访问
class Person {
public:
  string name;

private:
  int age; 
};

Person p;
p.name = "John"; // OK 
p.age = 20; // 错误,private成员

三、getter和setter

对于需要访问的私有成员,可以提供公有的getter和setter方法:

class Person {
public:
  int getAge() {
    return age;
  }

  void setAge(int a) {
    age = a;
  }

private:
  int age;
};

p.setAge(20);
int age = p.getAge(); 

getter和setter增强了封装,可以检查值的有效性。

四、接口和实现分离

类的接口与实现可以分离到.h和.cpp文件中:

// Person.h
class Person {
public:
  int getAge();
  void setAge(int age);

private:
  int age;
};

// Person.cpp
#include "Person.h"

int Person::getAge() {
  return age;
} 

void Person::setAge(int age) {
  this->age = age; 
}

五、继承和封装

子类可以访问父类public和protected成员,可以继承封装性。

封装是C++类的重要概念之一,掌握封装可以写出更安全、易维护的代码。封装、继承和多态构成了C++面向对象编程的三大特性。