【 C++】类和对象

下面将详细介绍 C++ 中的类和对象,并通过代码示例进行说明。

1. 类 (Class)

  • 概念: 类是 C++ 中面向对象编程的核心。它是一种用户自定义的数据类型,用于描述一类具有相同属性(数据成员)和行为(成员函数)的对象。可以将类看作是创建对象的蓝图或模板。

  • 作用:

    • 封装: 将数据(属性)和操作数据的函数(方法)捆绑在一起,形成一个独立的实体。这有助于隐藏内部实现细节,只暴露必要的接口。
    • 抽象: 通过类,我们可以对现实世界中的事物进行抽象,提取出关键特征和行为,忽略不重要的细节。
    • 代码复用: 通过创建类的对象,我们可以重复使用类的定义,避免代码冗余。
    • 数据保护: 通过访问修饰符(publicprivateprotected),可以控制类成员的访问权限,防止外部直接修改类的内部状态。
  • 定义:

class ClassName {
  // 访问修饰符 (public, private, protected)
  // 数据成员 (属性)
  // 成员函数 (方法)
};
  • 示例:
#include <iostream>
#include <string>

class Dog {
private: //私有成员,只能在类的内部访问
    std::string name;
    int age;
    std::string breed;

public: //公有成员,可以在类的外部访问
    // 构造函数 (用于初始化对象)
    Dog(std::string n, int a, std::string b) {
        name = n;
        age = a;
        breed = b;
    }

    // 成员函数 (方法)
    void bark() {
        std::cout << "Woof!" << std::endl;
    }

    void displayInfo() {
        std::cout << "Name: " << name << std::endl;
        std::cout << "Age: " << age << std::endl;
        std::cout << "Breed: " << breed << std::endl;
    }
    
    // 成员函数,用于设置和获取私有成员
    void setName(std::string n){
        name = n;
    }
    
    std::string getName(){
        return name;
    }
};

2. 对象 (Object)

  • 概念: 对象是类的实例。当我们创建一个类时,我们只是定义了一个数据类型。要使用这个数据类型,我们需要创建该类的对象。可以把对象看作是根据类的蓝图创建的具体实体。
  • 创建:
ClassName objectName; // 默认构造函数
ClassName objectName(arguments); // 带参数的构造函数
  • 访问成员:
objectName.dataMember; // 访问数据成员
objectName.memberFunction(arguments); // 调用成员函数
  • 示例:
    使用上面定义的Dog
int main() {
    // 创建 Dog 类的对象
    Dog myDog("Buddy", 3, "Golden Retriever");
    Dog yourDog("Lucy", 5, "Labrador");

    // 访问对象的成员
    myDog.bark(); // 输出: Woof!
    myDog.displayInfo();
    /*输出:
    Name: Buddy
    Age: 3
    Breed: Golden Retriever
    */
    
    yourDog.setName("Max");
    std::cout << yourDog.getName() << std::endl; //输出Max

    return 0;
}

3. 访问修饰符

  • public: 公有成员可以在类的内部和外部访问。
  • private: 私有成员只能在类的内部访问。这是实现封装和数据保护的关键。
  • protected: 受保护成员可以在类的内部以及其派生类(子类)中访问。

4. 构造函数和析构函数

  • 构造函数 (Constructor):

    • 一种特殊的成员函数,与类同名,没有返回类型。
    • 在创建对象时自动调用,用于初始化对象的数据成员。
    • 可以重载(有多个不同参数列表的构造函数)。
    • 如果没有显式定义构造函数,编译器会提供一个默认构造函数(不带参数)。
  • 析构函数 (Destructor):

    • 一种特殊的成员函数,与类同名,但在前面加上波浪号 (~)。
    • 没有返回类型,也没有参数。
    • 在对象销毁时(例如,超出作用域或使用 delete)自动调用,用于释放对象占用的资源(例如,动态分配的内存)。
    • 每个类只能有一个析构函数。

代码示例 (构造函数和析构函数):

#include <iostream>

class MyClass {
private:
    int* data;

public:
    // 构造函数
    MyClass(int size) {
        std::cout << "Constructor called" << std::endl;
        data = new int[size]; // 动态分配内存
    }

    // 析构函数
    ~MyClass() {
        std::cout << "Destructor called" << std::endl;
        delete[] data; // 释放动态分配的内存
    }
};

int main() {
    { // 创建一个作用域
        MyClass obj(5); // 创建对象,调用构造函数
    } // 对象超出作用域,调用析构函数

    return 0;
}

输出结果

Constructor called
Destructor called

总结

类和对象是 C++ 面向对象编程的基础。通过类,我们可以定义自定义数据类型,封装数据和行为,实现代码复用和数据保护。对象是类的实例,我们可以通过对象访问类的成员并执行操作。理解类和对象的概念对于掌握 C++ 编程至关重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值