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 内部使用
相关推荐
地平线开发者5 小时前
profiler debug 工具用法与高一致性策略
算法·自动驾驶
编程大师哥5 小时前
匿名函数 lambda + 高阶函数
java·python·算法
isyangli_blog5 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008116 小时前
FastAPI APIRouter
开发语言·python
Benszen6 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆6 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木6 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
我叫袁小陌6 小时前
算法解题思路指南
算法
MC皮蛋侠客6 小时前
C++17 多线程系列(五):C++17 并行算法——从串行到并行的零成本迁移
c++·多线程
地平线开发者6 小时前
Conv+BN+Add+ReLU 融合机制简介
算法·自动驾驶