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 内部使用
相关推荐
一水鉴天10 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
Frank_refuel10 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
Wang's Blog11 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
2601_9620715712 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
hetao173383712 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
\光辉岁月/13 小时前
5.java-数组
java·开发语言
Java后端的Ai之路13 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
谢亮_vipxieliang13 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
Zootopia62613 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
longlongzihan13 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划