一、基本概念
1. 什么是类(Class)
- 类是对一类具有相同属性和行为的事物的抽象描述
- 是一种自定义数据类型 ,是创建对象的模板
- 组成:成员变量(属性)+ 成员函数(行为)
2. 什么是对象(Object)
- 对象是类的具体实例
- 类是抽象的,对象是具体的
- 例:
Person是类,张三、李四是对象
二、类的定义语法
cpp
运行
class 类名 {
// 访问权限
public:
// 公有成员(外部可访问)
private:
// 私有成员(仅类内部可访问)
protected:
// 保护成员(类内部 + 子类可访问)
};
三种访问权限
- public:公有,类内、类外、子类都可访问
- private :私有,仅类内成员函数可访问,外部 / 子类不可直接访问
- protected:保护,类内 + 子类可访问,外部不可访问
类中未写权限时,默认是 private
三、对象的创建与使用
1. 栈对象(自动变量)
cpp
运行
类名 对象名;
对象名.成员;
2. 堆对象(动态分配)
cpp
运行
类名 *对象指针 = new 类名;
对象指针->成员;
delete 对象指针;
示例
cpp
运行
class Student {
public:
string name;
int age;
void show() {
cout << name << " " << age << endl;
}
};
int main() {
// 栈对象
Student s;
s.name = "小明";
s.age = 18;
s.show();
// 堆对象
Student *p = new Student;
p->name = "小红";
p->age = 19;
p->show();
delete p;
return 0;
}
四、封装(核心思想)
1. 封装含义
- 将属性和行为捆绑在一起
- 对外部隐藏实现细节,只开放安全接口
- 防止外部随意修改内部数据
2. 封装写法
cpp
运行
class Person {
private:
// 私有属性
string name;
int age;
public:
// 公有接口
void setName(string n) { name = n; }
void setAge(int a) {
if (a >= 0 && a <= 150) age = a;
}
string getName() { return name; }
int getAge() { return age; }
};
五、构造函数
1. 作用
- 创建对象时自动调用
- 用于初始化对象成员变量
2. 特点
- 函数名与类名完全相同
- 无返回值(不写 void)
- 可重载
- 不手动写时,编译器生成默认无参构造
3. 语法
cpp
运行
类名() {
// 初始化
}
类名(参数列表) {
// 带参构造
}
示例
cpp
运行
class Person {
public:
string name;
int age;
// 无参构造
Person() {
name = "无名氏";
age = 0;
}
// 带参构造
Person(string n, int a) {
name = n;
age = a;
}
};
六、析构函数
1. 作用
- 对象销毁时自动调用
- 用于释放对象占用的资源(如动态内存)
2. 特点
- 函数名:
~类名() - 无参、无返回值、不能重载
- 不写时编译器自动生成默认析构
示例
cpp
运行
class Test {
public:
Test() { cout << "对象创建" << endl; }
~Test() { cout << "对象销毁" << endl; }
};
七、this 指针
1. 本质
this是指向当前对象自身的指针- 成员函数默认隐含
this参数
2. 用途
- 解决成员变量与形参同名冲突
- 返回对象自身
return *this;
示例
cpp
运行
class Person {
private:
int age;
public:
void setAge(int age) {
// this->age 是成员变量,age 是形参
this->age = age;
}
};
八、对象数组
cpp
运行
// 栈对象数组
Person arr[3];
// 堆对象数组
Person *parr = new Person[3];
delete[] parr;
九、对象的初始化方式
- 无参构造:
Person p; - 带参构造:
Person p("张三", 20); - 赋值初始化:
Person p = Person("李四", 21); - 动态创建:
Person *p = new Person("王五", 22);
十、核心总结
- 类 = 属性 + 行为,是抽象模板
- 对象 = 类的实例,是具体实体
- 封装:私有属性 + 公有接口,保护数据
- 构造函数:创建对象时初始化
- 析构函数:销毁对象时释放资源
- this 指针:指向当前对象,解决命名冲突
- 权限:public 对外开发,private 内部使用