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 内部使用
相关推荐
雾岛听蓝1 天前
Qt操作指南:窗口组成与菜单栏
开发语言·经验分享·笔记·qt
zopple1 天前
Laravel vs ThinkPHP:PHP框架终极对决
开发语言·php·laravel
松☆1 天前
C++ 算法竞赛题解:P13569 [CCPC 2024 重庆站] osu!mania —— 浮点数精度陷阱与 `eps` 的深度解析
开发语言·c++·算法
耿雨飞1 天前
Python 后端开发技术博客专栏 | 第 06 篇 描述符与属性管理 -- 理解 Python 属性访问的底层机制
开发语言·python
耿雨飞1 天前
Python 后端开发技术博客专栏 | 第 08 篇 上下文管理器与类型系统 -- 资源管理与代码健壮性
开发语言·python
(Charon)1 天前
【C++/Qt】C++/Qt 实现 TCP Server:支持启动监听、消息收发、日志保存
c++·qt·tcp/ip
2601_949194261 天前
Python爬虫完整代码拿走不谢
开发语言·爬虫·python
jr-create(•̀⌄•́)1 天前
正则化和优化算法区别
pytorch·深度学习·神经网络·算法
c***89201 天前
python爬虫——爬取全年天气数据并做可视化分析
开发语言·爬虫·python
aq55356001 天前
C语言、C++和C#:三大编程语言核心差异详解
java·开发语言·jvm