C++类和对象

一、基本概念

1. 什么是类(Class)

  • 类是对一类具有相同属性和行为的事物的抽象描述
  • 是一种自定义数据类型 ,是创建对象的模板
  • 组成:成员变量(属性)+ 成员函数(行为)

2. 什么是对象(Object)

  • 对象是类的具体实例
  • 类是抽象的,对象是具体的
  • 例:Person 是类,张三、李四 是对象

二、类的定义语法

cpp

运行

复制代码
class 类名 {
    // 访问权限
public:
    // 公有成员(外部可访问)
    
private:
    // 私有成员(仅类内部可访问)

protected:
    // 保护成员(类内部 + 子类可访问)
};

三种访问权限

  1. public:公有,类内、类外、子类都可访问
  2. private :私有,仅类内成员函数可访问,外部 / 子类不可直接访问
  3. 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;

九、对象的初始化方式

  1. 无参构造:Person p;
  2. 带参构造:Person p("张三", 20);
  3. 赋值初始化:Person p = Person("李四", 21);
  4. 动态创建:Person *p = new Person("王五", 22);

十、核心总结

  1. 类 = 属性 + 行为,是抽象模板
  2. 对象 = 类的实例,是具体实体
  3. 封装:私有属性 + 公有接口,保护数据
  4. 构造函数:创建对象时初始化
  5. 析构函数:销毁对象时释放资源
  6. this 指针:指向当前对象,解决命名冲突
  7. 权限:public 对外开发,private 内部使用
相关推荐
智慧物业老杨25 分钟前
智慧物业数智化转型实战:从工单响应到业主满意度的闭环构建
java·开发语言
Kiling_070427 分钟前
Java集合框架:List集合详解与应用
java·开发语言·windows
fan_music41 分钟前
C语言如何实现C++的类
开发语言·c++
毋语天1 小时前
Python 常用内置模块详解:日志、随机数、时间、OS 与 JSON
开发语言·python
Asa121381 小时前
Nature Microbiology|跨微生物界菌株水平传播推断的新算法TRACS
算法
_君莫笑1 小时前
Qt+Qml前后端分离上位机软件技术方案
c++·qt·用户界面·qml
右耳朵猫AI1 小时前
Python技术周刊 2026年第14周
开发语言·python·okhttp
叼烟扛炮1 小时前
C++ 知识点22 函数模板
开发语言·c++·算法·函数模版
Tisfy1 小时前
LeetCode 2553.分割数组中数字的数位:模拟(maybe+翻转)——java也O(1)
java·数学·算法·leetcode·题解·模拟·取模
平行侠1 小时前
33水库抽样 - 从未知大小的流中等概率采样
数据结构·算法