第七章:类与对象(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 和成员函数能构建灵活、可扩展的模块化代码。

相关推荐
寻寻觅觅☆10 分钟前
东华OJ-基础题-104-A == B ?(C++)
开发语言·c++
lightqjx21 分钟前
【C++】unordered系列的封装
开发语言·c++·stl·unordered系列
zh_xuan36 分钟前
kotlin lazy委托异常时执行流程
开发语言·kotlin
阿猿收手吧!1 小时前
【C++】string_view:高效字符串处理指南
开发语言·c++
玄同7651 小时前
我的 Trae Skill 实践|使用 UV 工具一键搭建 Python 项目开发环境
开发语言·人工智能·python·langchain·uv·trae·vibe coding
Word码2 小时前
[C++语法] 继承 (用法详解)
java·jvm·c++
Yorlen_Zhang2 小时前
Python Tkinter Text 控件完全指南:从基础编辑器到富文本应用
开发语言·python·c#
lxl13072 小时前
C++算法(1)双指针
开发语言·c++
淀粉肠kk2 小时前
C++11列表初始化:{}的革命性进化
c++
不绝1912 小时前
C#进阶:预处理指令/反射,Gettype,Typeof/关键类
开发语言·c#