C++讲解—类(1)

发布于:2025-06-23 ⋅ 阅读:(15) ⋅ 点赞:(0)

在 C++ 中,类是一个关键概念,凭借其封装和继承的特性,能够助力程序员之间实现高效的分工协作,共同完成复杂的大型项目。我们先从最简单的概念入手,再进行更深层次的了解和应用。

1. 类的定义

类是用户自定义的一种数据类型,它将数据和对数据进行操作的成员函数封装在一起,用于表示现实世界中的事物或抽象概念。

1.1 类和函数有什么区别呢?

如果将程序比作一个工厂,函数就像是工厂中的各种机器,每台机器完成特定的任务;而类就像是工厂中的工人,他们不仅携带工具(成员变量),还掌握技能(成员函数),可以独立地完成复杂的任务。
如果是实现一个 独立的、简单的功能,且不需要管理状态,使用函数可能更合适。**如果功能涉及到 数据和行为的结合,并且需要管理状态,使用类会更合适。**如管理一个对象的状态,用户档案。还比如需要将数据和操作封装在一起,操作一些图形,文件。或者说需要较为复杂的继承,例如游戏角色的分化,从单纯的角色分化为主角和各类小怪。

1.2 类和函数的例子

让我们以一个银行账户的数据管理为例,如果我们只是使用函数的话,那么有以下代码:

#include <string>
#include <iostream>
using namespace std;

int main()
{
    string liyang_name = "李阳"; // 李阳的账户名称
    string liyang_number = "12345678"; // " 账号
    long liyang_balance = 1000; // " 账户余额

    string zhouyan_name = "周燕"; // 周燕的账户名称
    string zhouyan_number = "87654321"; // " 账号
    long zhouyan_balance = 200; // " 账户余额

    liyang_balance -= 200; // 李阳取出 200 元
    zhouyan_balance += 100; // 周燕存入 100 元

    cout << "■李阳的账户:\"" << liyang_name << "\" (" << liyang_number << ") " << liyang_balance << "元\n";
    cout << "■周燕的账户:\"" << zhouyan_name << "\" (" << zhouyan_number << ") " << zhouyan_balance << "元\n";
}

在这里,我们想要用不同的账户进行存取,只能在变量名的命名中进行变化,每次都要建立新的变量,管理十分复杂。那么我们试着将账户看作一个类,这个类里面有各种成员,每个成员代表了不同的账户属性。当想要建立用户的账户时,就相当于建立了一个实体对象。每进行一次存取,就是存入一个数据,就只需要那么只需要操作这一个实体对象里面的数据即可。
类和函数的区别
如果我们使用类去存储数据,就可以使用下面的代码:

#include <string>
#include <iostream>
using namespace std;

class Account {//声明类的名字和成员
public:// 先不用管,还没有学到
    string name;    // 账户名称
    string number;  // 账号
    long balance;   // 账户余额
};

int main()
{
    Account liyang;    // 李阳的账户
    Account zhouyan;   // 周燕的账户

    liyang.name = "李阳";       // 李阳的账户名称
    liyang.number = "12345678"; // 账号
    liyang.balance = 1000;      // 账户余额

    zhouyan.name = "周燕";       // 周燕的账户名称
    zhouyan.number = "87654321"; // 账号
    zhouyan.balance = 200;      // 账户余额

    liyang.balance -= 200;      // 李阳取出200元
    zhouyan.balance += 100;     // 周燕存入100元

    cout << "■李阳的:账户" << liyang.name << " (" << liyang.number
         << ") " << liyang.balance << "元\n";

    cout << "■周燕的账户:" << zhouyan.name << " (" << zhouyan.number
         << ") " << zhouyan.balance << "元\n";
}

而怎样理解类和对象的关系呢?就可以概括为类是抽象的,而对象是类的实体。就是月饼模具和月饼本身的关系,而你想选择的馅料和饼皮材料便是对象的实体数据,不一样的材料,做出了不一样的月饼,也便有了不一样的月饼。

2. 类的成员-变量与函数

1.成员变量与成员函数

类的主体由成员变量成员函数组成,以上个银行账户管理系统的代码为例,这里面只有成员变量,并没有成员函数。那么我们每次存钱或者取钱的时候,要在main函数中手动进行加减余额,这相当于多了一次理解的规则,每次存入100元钱相当于要使用这个命令balance += 100,那么如果将这个命令直接变为语言可以理解的规则,我们直接使用deposit(100) (deposit英文释义:存入) 这个语句,就可以直接让银行余额变多100元了。这里就可以使用成员函数来实现这件事了。

//在类中写下存入函数
    void deposit(long amnt) {
        crnt_balance += amnt;
    }
 //在main函数中直接调存入函数
 zhouyan.deposit(100);   // 周燕存入100元

3. 公有成员函数与私有成员变量

类中的成员变量成员函数,它们通过访问限定符来控制外部对它们的访问权限, 分别为private(私有)、protected(受保护)或 public(公有)。私有成员只能在类的内部被访问。类的外部代码和派生类都不能直接访问私有成员。受保护成员只能在类的内部和派生类(子类)中被访问。类的外部代码不能直接访问受保护成员。公有成员可以在类的外部被访问。任何对象都可以直接访问公有成员。

这种分类并不是固定的,而是根据设计需求来决定的。不过,通常情况下,成员变量被声明为 private成员函数被声明为 public,这种设计有其合理性和优势。成员变量的私有保证了数据的封装性,外部代码不可以修改数据的类型;成员函数作为类的接口,可以通过外部代码与类的对象进行交互。

class Account {
private:
    string full_name;  // 账户名称
    string number;     // 账号
    long crnt_balance; // 账户余额

public:
    // 返回账户名称
    string name() {
        return full_name;
    }

    // 返回账号
    string no() {
        return number;
    }

    // 返回账户余额
    long balance() {
        return crnt_balance;
    }

    // 存入
    void deposit(long amnt) {
        crnt_balance += amnt;
    }

    // 取出
    void withdraw(long amnt) {
        crnt_balance -= amnt;
    }
};

4. 构造函数

在成员函数中,必须要有的便是构造函数,构造函数是C++中的一种特殊函数,它在创建对象时自动被调用,用于初始化对象。构造函数的名称必须与类名相同,并且没有返回类型(包括void)。构造函数的主要作用是为对象的成员变量赋初值,确保对象在创建时处于一个已知的、有效的状态。

class Account {
private:
    string full_name;  // 账户名称
    string number;     // 账号
    long crnt_balance; // 账户余额

public:
    // 构造函数
    Account(string name, string num, long amnt) {
        full_name = name;  // 账户名称
        number = num;      // 账号
        crnt_balance = amnt; // 账户余额
    }
};

int main()
{
    Account liyang("李阳", "12345678", 1000);  // 初始化李阳的账户
    Account zhouyan("周燕", "87654321", 200);  // 初始化周燕的账户
/
}

5.完整的示例代码及其类的成员

// 银行账户类(第2版)及类的使用例程
#include <string>
#include <iostream>
using namespace std;

class Account {
private:
    string full_name;  // 账户名称
    string number;     // 账号
    long crnt_balance; // 账户余额

public:
    // 构造函数
    Account(string name, string num, long amnt) {
        full_name = name;  // 账户名称
        number = num;      // 账号
        crnt_balance = amnt; // 账户余额
    }

    // 返回账户名称
    string name() {
        return full_name;
    }

    // 返回账号
    string no() {
        return number;
    }

    // 返回账户余额
    long balance() {
        return crnt_balance;
    }

    // 存入
    void deposit(long amnt) {
        crnt_balance += amnt;
    }

    // 取出
    void withdraw(long amnt) {
        crnt_balance -= amnt;
    }
};

int main()
{
    Account liyang("李阳", "12345678", 1000);  // 李阳的账户
    Account zhouyan("周燕", "87654321", 200);  // 周燕的账户

    liyang.withdraw(200);   // 李阳取出200元
    zhouyan.deposit(100);   // 周燕存入100元

    cout << "■李阳的账户:" << liyang.name() << " (" << liyang.no()
         << ") " << liyang.balance() << "元\n";

    cout << "■周燕的账户:" << zhouyan.name() << " (" << zhouyan.no()
         << ") " << zhouyan.balance() << "元\n";
}

类的成员


网站公告

今日签到

点亮在社区的每一天
去签到