C++面向对象编程:类与对象详解
C++面向对象编程:类与对象详解
引言
面向对象编程(OOP)是现代编程的核心范式之一,它通过"对象"的概念来组织代码和数据。在C++中,类和对象是实现OOP的基础构建块。本文将全面讲解C++中类与对象的概念、语法和实际应用,帮助您建立坚实的面向对象编程基础。
从结构体到类
在C++中,类可以看作是结构体的扩展。两者关键区别在于默认访问权限:
// 结构体示例
struct Student {std::string name; // 默认publicint age;float gpa;
};// 类示例
class Student {std::string name; // 默认privateint age;float gpa;
};
类的基本概念
类的定义
class Rectangle {
private:double width, height; // 私有成员public:// 构造函数Rectangle(double w, double h) : width(w), height(h) {}// 成员函数double area() const {return width * height;}// 访问器double getWidth() const { return width; }void setWidth(double w) { if(w > 0) width = w; }
};
访问修饰符
private
: 仅类内可访问protected
: 类内和派生类可访问public
: 完全公开访问
对象的创建与使用
Rectangle rect(5.0, 3.0); // 栈上创建
double a = rect.area(); // 调用成员函数// 动态创建
Rectangle* pRect = new Rectangle(4.0, 2.0);
delete pRect; // 记得释放内存
类成员详解
成员变量
class Counter {
private:int count; // 实例变量static int total; // 静态变量const int MAX = 100; // const成员public:Counter() : count(0) { total++; }
};int Counter::total = 0; // 静态成员初始化
成员函数
class Circle {
private:double radius;public:// 类内定义double area() const { return 3.14159 * radius * radius; }// 类外定义void setRadius(double r);
};void Circle::setRadius(double r) {radius = r;
}
特殊成员函数
class Person {
private:std::string name;int age;public:// 构造函数Person(const std::string& n, int a) : name(n), age(a) {}// 析构函数~Person() { /* 清理资源 */ }// 拷贝构造函数Person(const Person& other) : name(other.name), age(other.age) {}
};
类的关系
组合关系
class Engine {
public:void start() { /*...*/ }
};class Car {
private:Engine engine; // 组合
};
关联关系
class Student;class Course {
private:std::vector<Student*> students; // 关联
};
银行账户系统示例
class BankAccount {
private:std::string accountNumber;double balance;std::vector<Transaction> history; // 组合public:BankAccount(const std::string& accNum) : accountNumber(accNum), balance(0) {}void deposit(double amount) {balance += amount;recordTransaction("Deposit", amount);}// 其他成员函数...
};
最佳实践
- 封装原则:隐藏实现细节,提供清晰接口
- 合理初始化:使用初始化列表,确保所有成员初始化
- const正确性:适当使用const修饰符
- 避免过大类:遵循单一职责原则
- 谨慎使用友元:仅在必要时破坏封装
总结
类和对象是C++面向对象编程的基础,提供了封装、代码重用和模块化等优势。掌握这些概念对于编写可维护的C++代码至关重要。下一篇文章将深入探讨继承和多态性,进一步扩展面向对象编程的能力。