C++ 类与对象
面向对象编程的核心概念解析 – 编程小白也能轻松理解
类的基本概念
什么是类?
类(Class)就像是一个蓝图或模板,它描述了一类事物的共同特征和行为。
想象类就像”汽车设计图”:设计图描述了汽车应该有的属性(颜色、品牌、速度)和行为(启动、加速、刹车)。
类的组成
- 成员变量 – 类的属性(如:汽车的颜色、速度)
- 成员函数 – 类的行为(如:汽车的启动、加速)
- 访问修饰符 – 控制谁可以访问类的成员
简单类定义示例
class Car { // 定义一个Car类
public:
// 成员变量(属性)
string color;
int maxSpeed;
// 成员函数(行为)
void start() {
cout << “汽车启动了!” << endl;
}
void accelerate() {
cout << “汽车加速中…” << endl;
}
};
public:
// 成员变量(属性)
string color;
int maxSpeed;
// 成员函数(行为)
void start() {
cout << “汽车启动了!” << endl;
}
void accelerate() {
cout << “汽车加速中…” << endl;
}
};
对象与实例化
什么是对象?
对象(Object)是类的具体实例。根据”汽车设计图”可以制造出多辆真实的汽车,这些汽车就是对象。
创建对象的过程
- 声明对象:Car myCar;
- 初始化对象:使用构造函数(稍后介绍)
- 使用对象:访问成员变量和调用成员函数
对象使用示例
// 创建Car类的对象
Car myCar;
// 设置对象属性
myCar.color = “红色”;
myCar.maxSpeed = 200;
// 调用对象方法
myCar.start();
myCar.accelerate();
Car myCar;
// 设置对象属性
myCar.color = “红色”;
myCar.maxSpeed = 200;
// 调用对象方法
myCar.start();
myCar.accelerate();
一个类可以创建多个对象,就像可以根据同一张设计图制造多辆汽车。
访问修饰符
访问修饰符控制类成员的访问权限:
public(公开)
- 类的外部可以直接访问
- 通常用于成员函数
private(私有)
- 只能在类内部访问
- 通常用于成员变量
- 是C++的默认访问权限
protected(保护)
- 在类内部和子类中可以访问
- 用于继承场景
访问控制示例
class BankAccount {
private:
// 私有变量,外部无法直接访问
double balance;
public:
// 公开方法,外部可以调用
void deposit(double amount) {
balance += amount;
}
double getBalance() {
return balance;
}
};
private:
// 私有变量,外部无法直接访问
double balance;
public:
// 公开方法,外部可以调用
void deposit(double amount) {
balance += amount;
}
double getBalance() {
return balance;
}
};
构造函数与析构函数
构造函数
- 在创建对象时自动调用
- 用于初始化对象
- 与类同名,没有返回类型
- 可以有多个(重载)
析构函数
- 在对象销毁时自动调用
- 用于清理资源(如释放内存)
- 类名前加~,没有参数和返回类型
- 每个类只有一个析构函数
构造与析构示例
class Student {
private:
string name;
int age;
public:
// 构造函数
Student(string n, int a) {
name = n;
age = a;
cout << “学生对象被创建” << endl;
}
// 析构函数
~Student() {
cout << “学生对象被销毁” << endl;
}
};
private:
string name;
int age;
public:
// 构造函数
Student(string n, int a) {
name = n;
age = a;
cout << “学生对象被创建” << endl;
}
// 析构函数
~Student() {
cout << “学生对象被销毁” << endl;
}
};
类与对象关系可视化
通过实际例子理解类和对象的关系
类:手机设计图
属性:
品牌、颜色、屏幕尺寸
行为:
打电话、发短信、拍照
对象1:我的手机
品牌:
华为
颜色:
黑色
屏幕:
6.5英寸
对象2:你的手机
品牌:
苹果
颜色:
白色
屏幕:
6.1英寸
this指针
什么是this指针?
this是一个指向当前对象的指针,在类的成员函数中使用。
想象你在一个房间里说”这个房间” – “this”就相当于指向当前房间的指针。
this指针的作用
- 区分同名的成员变量和局部变量
- 返回当前对象本身
- 在成员函数中访问当前对象的成员
this指针示例
class Person {
private:
string name;
public:
void setName(string name) {
// 使用this区分同名的成员变量和参数
this->name = name;
}
Person* getAddress() {
// 返回当前对象的地址
return this;
}
};
private:
string name;
public:
void setName(string name) {
// 使用this区分同名的成员变量和参数
this->name = name;
}
Person* getAddress() {
// 返回当前对象的地址
return this;
}
};
静态成员
静态成员变量
- 使用static关键字声明
- 属于类,而不是某个对象
- 所有对象共享同一份静态成员变量
- 需要在类外初始化
静态成员函数
- 使用static关键字声明
- 只能访问静态成员变量
- 可以通过类名直接调用
静态成员示例
class Employee {
private:
string name;
static int count; // 静态成员变量
public:
Employee(string n) {
name = n;
count++; // 创建新员工时计数增加
}
static int getCount() {
return count; // 静态成员函数
}
};
// 在类外初始化静态成员变量
int Employee::count = 0;
private:
string name;
static int count; // 静态成员变量
public:
Employee(string n) {
name = n;
count++; // 创建新员工时计数增加
}
static int getCount() {
return count; // 静态成员函数
}
};
// 在类外初始化静态成员变量
int Employee::count = 0;
友元(friend)
什么是友元?
友元可以是一个函数或类,它被授权访问另一个类的私有(private)和保护(protected)成员。
就像你允许好朋友进入你的私人房间一样,友元可以访问类的私有成员。
友元的特点
- 打破了类的封装性,应谨慎使用
- 可以是普通函数、其他类的成员函数或整个类
- 在类内部声明,使用friend关键字
友元函数示例
class Box {
private:
double width;
public:
Box(double w) { width = w; }
// 声明友元函数
friend void printWidth(Box box);
};
// 定义友元函数
void printWidth(Box box) {
// 友元函数可以访问私有成员width
cout << “Box宽度: “ << box.width << endl;
}
private:
double width;
public:
Box(double w) { width = w; }
// 声明友元函数
friend void printWidth(Box box);
};
// 定义友元函数
void printWidth(Box box) {
// 友元函数可以访问私有成员width
cout << “Box宽度: “ << box.width << endl;
}
继承与多态
继承(Inheritance)
- 允许创建新类(派生类)基于已有类(基类)
- 派生类继承基类的属性和行为
- 支持代码重用和层次分类
多态(Polymorphism)
- 同一操作作用于不同对象,产生不同行为
- 通过虚函数(virtual function)实现
- 运行时确定调用哪个函数(动态绑定)
继承与多态简单示例
// 基类
class Animal {
public:
virtual void speak() { // 虚函数
cout << “动物发出声音” << endl;
}
};
// 派生类
class Dog : public Animal {
public:
void speak() override {
cout << “汪汪!” << endl;
}
};
// 另一个派生类
class Cat : public Animal {
public:
void speak() override {
cout << “喵喵!” << endl;
}
};
class Animal {
public:
virtual void speak() { // 虚函数
cout << “动物发出声音” << endl;
}
};
// 派生类
class Dog : public Animal {
public:
void speak() override {
cout << “汪汪!” << endl;
}
};
// 另一个派生类
class Cat : public Animal {
public:
void speak() override {
cout << “喵喵!” << endl;
}
};
学习总结
类(Class)是蓝图,对象(Object)是根据蓝图创建的具体实例。通过封装、继承和多态三大特性,C++的类与对象实现了面向对象编程的核心思想。掌握这些基础知识,你就迈出了成为C++开发者的重要一步!
记住:多动手实践是掌握面向对象编程的关键!