c++开发之类的理解总结

目录

如何理解类?

类的核心特性:封装

类的基本组成

类的实现步骤

步骤 1:声明类(类的结构)

步骤 2:实现类的成员函数

步骤 3:使用类(创建对象并调用方法)

关键细节说明

总结


在 C++ 中,类(Class) 是面向对象编程(OOP)的核心概念,它是一种用户自定义的数据类型,用于封装数据(属性) 和操作数据的函数(方法),实现了 “数据与操作的结合”。

如何理解类?

可以把类想象成一个 “模板” 或 “蓝图”,而根据这个模板创建的具体实例称为 “对象(Object)”。

例如:

  • “汽车” 可以看作一个类,它包含属性(颜色、品牌、速度)和方法(启动、加速、刹车);
  • 你家的 “特斯拉 Model 3” 就是 “汽车” 类的一个具体对象,它有具体的颜色(红色)、品牌(特斯拉),并且可以执行启动、加速等操作。

类的核心特性:封装

类通过访问控制符限制对内部数据的直接访问,只允许通过类提供的方法操作数据,这就是 “封装”。封装的好处是:

  • 隐藏内部实现细节,只暴露必要的接口;
  • 防止外部误操作导致数据混乱。

类的基本组成

一个类通常包含以下部分:

  1. 成员变量(属性):存储对象的数据(如颜色、年龄);
  2. 成员函数(方法):操作成员变量的函数(如设置颜色、获取年龄);
  3. 访问控制符public(公开,外部可访问)、private(私有,仅类内可访问)、protected(保护,类内和派生类可访问);
  4. 特殊函数:构造函数(初始化对象)、析构函数(清理对象)、拷贝构造函数等。

类的实现步骤

下面通过一个具体示例(定义一个 Person 类)说明如何实现类。

步骤 1:声明类(类的结构)

类的声明通常放在头文件(.h)中,用 class 关键字定义,包含成员变量和成员函数的声明。

// Person.h
#ifndef PERSON_H  // 防止头文件重复包含
#define PERSON_H

#include <string>  // 用于字符串类型

class Person {
private:  // 私有成员:仅类内可访问(封装数据)
    std::string name;  // 姓名
    int age;           // 年龄

public:   // 公开成员:外部可访问(暴露接口)
    // 构造函数(初始化对象,与类名相同,无返回值)
    Person(std::string n, int a);  // 带参数的构造函数
    
    // 成员函数(操作数据的方法)
    void setName(std::string n);   // 设置姓名
    std::string getName();         // 获取姓名
    void setAge(int a);            // 设置年龄
    int getAge();                  // 获取年龄
    void introduce();              // 自我介绍
};

#endif  // PERSON_H
步骤 2:实现类的成员函数

成员函数的实现通常放在源文件(.cpp)中,需要通过 类名::函数名 指明属于哪个类。

// Person.cpp
#include "Person.h"  // 包含类的声明
#include <iostream>  // 用于输出

// 实现构造函数:初始化成员变量
Person::Person(std::string n, int a) {
    name = n;
    // 年龄不能为负数,这里加简单校验(体现封装的优势:可控制数据合法性)
    age = (a > 0) ? a : 0;
}

// 实现设置姓名的方法
void Person::setName(std::string n) {
    name = n;
}

// 实现获取姓名的方法
std::string Person::getName() {
    return name;
}

// 实现设置年龄的方法(带合法性校验)
void Person::setAge(int a) {
    if (a > 0) {
        age = a;
    }
}

// 实现获取年龄的方法
int Person::getAge() {
    return age;
}

// 实现自我介绍的方法
void Person::introduce() {
    std::cout << "大家好,我叫" << name << ",今年" << age << "岁。" << std::endl;
}
步骤 3:使用类(创建对象并调用方法)

通过类创建对象(实例化),然后通过对象调用公开的成员函数。

// main.cpp
#include "Person.h"

int main() {
    // 创建 Person 类的对象(调用构造函数初始化)
    Person p1("张三", 20);  // p1 是一个具体的人
    
    // 调用公开方法操作对象
    p1.introduce();  // 输出:大家好,我叫张三,今年20岁。
    
    // 修改对象的属性(通过公开方法,而非直接访问私有变量)
    p1.setName("张三丰");
    p1.setAge(100);
    p1.introduce();  // 输出:大家好,我叫张三丰,今年100岁。
    
    // 尝试直接访问私有成员(编译报错,体现封装的保护作用)
    // p1.name = "李四";  // 错误:name 是 private,外部不可直接访问
    
    return 0;
}

关键细节说明

  1. 访问控制符的作用

    • private:成员变量通常设为私有,防止外部直接修改,确保数据安全;
    • public:成员函数(接口)设为公开,外部通过接口操作数据;
    • protected:用于继承场景,允许派生类访问(后续继承章节会详细说明)。
  2. 构造函数

    • 用于对象初始化,与类名相同,无返回值;
    • 若未显式定义,编译器会生成默认构造函数(无参数);
    • 可以重载(定义多个参数不同的构造函数)。
  3. 析构函数

    • 当对象销毁时自动调用,用于释放资源(如动态分配的内存);
    • 格式:~类名(),无参数,无返回值;
    • 示例(在 Person 类中添加析构函数):
      // Person.h 中声明
      ~Person();
      
      // Person.cpp 中实现
      Person::~Person() {
          std::cout << name << "的对象被销毁了。" << std::endl;
      }
      

总结

  • 是封装数据和操作的模板,对象是类的具体实例;
  • 实现类的步骤:声明类(成员变量 + 函数)→ 实现成员函数 → 创建对象并使用;
  • 核心是通过 private 隐藏数据,public 暴露接口,实现封装性,保证数据安全和代码可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

start_up_go

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值