C++类和对象-封装
1 前言
C++作为典型的面向对象编程语言,其核心思想在于:万物皆对象。对象包含其属性(数据)与行为(函数),而具有相同特征的一组对象可以抽象为类(Class)。
在面向对象思想中,C++提供了三大基本特性:
封装(Encapsulation)
继承(Inheritance)
多态(Polymorphism)
封装是三大特性中最基础的部分,它为类提供属性与行为的组织结构,并通过访问权限控制数据安全性。
2 封装
2.1 封装的基本含义
封装指将数据(属性)和操作这些数据的函数(行为)组织为一个整体,并通过访问控制实现数据安全与模块化管理。
2.1.1 封装的意义
表达现实世界事物
数据与行为统一存放在类中,使抽象更贴近真实物体。
权限控制,保护数据
通过访问权限限制外部对内部数据的直接访问,防止误用或非法操作。
2.2 基本语法格式
class 类名 {
public:
// 公共行为 / 属性
protected:
// 受保护的成员
private:
// 私有成员
};2.3 设计一个圆类,计算圆的周长
#include <iostream>
using namespace std;
const double PI = 3.14;
class Circle {
public:
int m_r; // 半径
double calculatePerimeter() {
return 2 * PI * m_r;
}
};
int main() {
Circle c1;
c1.m_r = 10;
cout << "圆的周长为: " << c1.calculatePerimeter() << endl;
return 0;
}说明:将半径和求周长的行为封装在同一个类中,表现事物本身与其功能的统一性。
2.4 学生类的封装
class Student {
public:
void setName(const string& name) { m_name = name; }
void setID(int id) { m_id = id; }
void show() const {
cout << "Name: " << m_name << ", ID: " << m_id << endl;
}
private:
string m_name;
int m_id;
};
int main() {
Student stu;
stu.setName("Tom");
stu.setID(2024);
stu.show();
return 0;
}说明:属性设为私有,通过公共接口进行访问 → 数据可控,修改安全。
3 访问权限与控制
3.1 三种权限说明
示例:
class Person {
public:
string m_Name; // 公共属性
protected:
string m_Car; // 保护属性
private:
int m_Password; // 私有属性
};4 struct 与 class 的区别
在 C++ 中,唯一的语法区别在默认访问权限:
class A { int m_a; };
struct B { int m_a; };
int main() {
A a;
// a.m_a = 10; // 错误:private
B b;
b.m_a = 10; // 正确:public
}5 成员属性设为私有的优点
读取/写入行为可控
可以只读、只写或可读可写。
可在写入时检查有效性
防止无效或危险数据。
示例:
class Person {
public:
void setName(const string& name) { m_Name = name; }
string getName() const { return m_Name; }
void setAge(int age) {
if(age < 0 || age > 150) {
cout << "非法年龄!" << endl;
return;
}
m_Age = age;
}
int getAge() const { return m_Age; }
void setLover(const string& lover) { m_Lover = lover; } // 只写
private:
string m_Name;
int m_Age;
string m_Lover;
};6 技术术语解释
7 总结
封装作为面向对象最基础的特性,核心在于:
将属性与行为组织为一个整体,贴合现实世界抽象;
通过访问控制保护内部数据,提升程序安全性和可维护性;
为后续的继承和多态特性打下结构基础。
掌握封装,不仅能写出更健壮、可扩展、结构清晰的代码,也能更好地理解面向对象程序设计的核心思想。
本文为原创内容,遵循 CC BY-NC-ND 4.0 协议。转载请注明来源 kixyu,禁止商业使用及修改演绎。
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果