第七章:类与对象(c++)

目录

一、类与对象的基本概念

二、基本语法

三、构造函数与析构函数

[3.1 构造函数(Constructor)](#3.1 构造函数(Constructor))

[3.2 析构函数(Destructor)](#3.2 析构函数(Destructor))

四、访问控制

[五、this 指针](#五、this 指针)

六、工程实践案例

[6.1 学生成绩管理类](#6.1 学生成绩管理类)

七、小结


在 C++ 中,类与对象是面向对象编程(OOP)的核心概念。掌握类与对象不仅能让你写出结构清晰、易扩展的代码,也为后续学习继承、多态和模板打下基础。

本文从概念、语法、构造函数/析构函数、访问控制、this 指针、工程实践等角度讲解 C++ 的类与对象。


一、类与对象的基本概念

  • 类(Class):是对具有相同属性和行为的对象的抽象。

  • 对象(Object):类的实例,拥有类定义的属性和行为。

类是模板,对象是具体实例。


二、基本语法

cpp 复制代码
#include <iostream>
using namespace std;

// 定义一个类
class Student {
public:             // 公有成员
    string name;
    int age;

    void display() { // 成员函数
        cout << "Name: " << name << ", Age: " << age << endl;
    }
};

int main() {
    Student s1;     // 创建对象
    s1.name = "Alice";
    s1.age = 20;
    s1.display();

    Student s2;
    s2.name = "Bob";
    s2.age = 22;
    s2.display();

    return 0;
}

输出:

cpp 复制代码
Name: Alice, Age: 20
Name: Bob, Age: 22

三、构造函数与析构函数

3.1 构造函数(Constructor)

  • 作用:对象创建时初始化成员变量

  • 特点

    • 名称与类名相同

    • 无返回值

    • 可以重载

cpp 复制代码
class Student {
public:
    string name;
    int age;

    // 构造函数
    Student(string n, int a) {
        name = n;
        age = a;
        cout << "Student " << name << " created." << endl;
    }
};

int main() {
    Student s("Charlie", 18);
    cout << s.name << " " << s.age << endl;
}

3.2 析构函数(Destructor)

  • 作用:对象生命周期结束时释放资源

  • 特点

    • 名称与类名相同,前加 ~

    • 无参数,无返回值

    • 每个对象只调用一次

cpp 复制代码
class Student {
public:
    string name;
    Student(string n) { name = n; }
    ~Student() { cout << name << " destroyed." << endl; }
};

int main() {
    Student s("Daisy");
}

输出:

cpp 复制代码
Daisy destroyed.

析构函数对于管理动态内存和文件资源至关重要。


四、访问控制

C++ 类有三种访问控制:

关键字 作用域
public 公有成员,类外可访问
private 私有成员,只能在类内访问
protected 受保护成员,可在类内及子类访问
cpp 复制代码
class Student {
private:
    int id; // 私有成员

public:
    string name;

    void setId(int i) { id = i; }
    int getId() { return id; }
};

int main() {
    Student s;
    s.name = "Emma";       // 可以访问 public
    s.setId(1001);         // 通过公有函数访问 private
    cout << s.getId() << endl;
}

五、this 指针

  • 概念 :每个对象的成员函数内部都有一个隐含指针 this,指向调用该函数的对象本身。

  • 用途

    • 区分成员变量与参数名冲突

    • 返回对象自身(链式调用)

cpp 复制代码
class Student {
private:
    string name;
public:
    Student(string name) { this->name = name; } // 区分参数和成员
    Student& setName(string name) { this->name = name; return *this; }
    void display() { cout << name << endl; }
};

int main() {
    Student s("Frank");
    s.setName("Grace").display(); // 链式调用
}

六、工程实践案例

6.1 学生成绩管理类

cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;

class Student {
private:
    string name;
    int age;
    vector<int> scores;

public:
    Student(string n, int a) : name(n), age(a) {}

    void addScore(int score) { scores.push_back(score); }

    double average() {
        int sum = 0;
        for(int s : scores) sum += s;
        return scores.empty() ? 0 : (double)sum / scores.size();
    }

    void display() {
        cout << "Name: " << name << ", Age: " << age 
             << ", Avg: " << average() << endl;
    }
};

int main() {
    Student s1("Alice", 20);
    s1.addScore(80);
    s1.addScore(90);
    s1.display();

    Student s2("Bob", 22);
    s2.addScore(70);
    s2.addScore(60);
    s2.display();
}

输出:

cpp 复制代码
Name: Alice, Age: 20, Avg: 85
Name: Bob, Age: 22, Avg: 65

这个案例展示了类封装属性和行为、动态存储(vector)、构造函数初始化和成员函数调用的完整流程。


七、小结

  • 类与对象是面向对象编程的核心,能够封装数据和行为,提高代码可读性和复用性。

  • 构造函数与析构函数管理对象生命周期,是资源管理的基础。

  • 访问控制保护类内部状态,提供接口封装。

  • this 指针帮助成员函数识别调用对象,同时支持链式操作。

  • 工程实践中,类与对象结合 STL 和成员函数能构建灵活、可扩展的模块化代码。

相关推荐
梦梦代码精2 小时前
BuildingAI vs Dify vs 扣子:三大开源智能体平台架构风格对比
开发语言·前端·数据库·后端·架构·开源·推荐算法
yyf198905252 小时前
C++ 跨平台开发的挑战与应对策略
c++
又见野草3 小时前
C++类和对象(中)
开发语言·c++
kgduu3 小时前
js之表单
开发语言·前端·javascript
钊兵3 小时前
java实现GeoJSON地理信息对经纬度点的匹配
java·开发语言
毕设源码-钟学长3 小时前
【开题答辩全过程】以 基于Python的健康食谱规划系统的设计与实现为例,包含答辩的问题和答案
开发语言·python
秋刀鱼程序编程3 小时前
Java基础入门(五)----面向对象(上)
java·开发语言
Remember_9933 小时前
【LeetCode精选算法】滑动窗口专题二
java·开发语言·数据结构·算法·leetcode
Filotimo_4 小时前
在java开发中,cron表达式概念
java·开发语言·数据库