恭喜你学习完C语言与数据结构的有关内容,现在让我们开始进行对C++的学习吧~

💝💝💝如果你对C语言或数据结构还存在疑惑,欢迎观看我之前的作品


目录

一、引言

二、类的定义

三、对象的创建和使用

四、构造函数和析构函数

五、总结


一、引言

二、类的定义

在 C++ 中,类是一种用户自定义的数据类型,它将数据和对数据进行操作的函数封装在一起。类的定义通常包括以下部分:

class ClassName {
public:
    // 成员函数声明
    void function1();
    int function2(int param);

private:
    // 数据成员声明
    int data1;
    double data2;
};

【C++】类与对象基础概念解析-LMLPHP

【C++】类与对象基础概念解析-LMLPHP

1.访问限定符

  • public:声明在public部分的成员可以在类的外部被访问。通常,成员函数会被定义为public,以便外部代码能够调用它们来操作类的数据。
  • private:声明在private部分的成员只能在类的内部被访问。数据成员通常被定义为private,以保护数据的完整性和安全性,防止外部代码直接修改数据。
  • 还有protected访问限定符,用于在继承中控制成员的访问权限,本文暂不深入讨论。

【C++】类与对象基础概念解析-LMLPHP

2.成员函数

  • 成员函数是类中定义的函数,它们可以访问类的成员数据并对其进行操作。成员函数可以在类内定义,也可以在类外定义。在类外定义成员函数时,需要使用类名和作用域解析运算符::
  • 例如:
void ClassName::function1() {
    // 函数体实现
}

int ClassName::function2(int param) {
    // 函数体实现,可能会使用类的数据成员
    data1 += param;
    return data1;
}

【C++】类与对象基础概念解析-LMLPHP

3.数据成员

  • 数据成员是类中用于存储数据的变量。它们可以是各种数据类型,如整数、浮点数、字符等,也可以是其他类的对象。数据成员的初始化可以在类的构造函数中进行,也可以在定义时进行默认初始化。

三、对象的创建和使用

类只是一种定义,要使用类中的数据和函数,需要创建类的对象。对象是类的实例,它具有类所定义的属性和行为。

1.对象的创建

  • 可以通过以下方式创建类的对象:
ClassName obj; // 创建一个名为obj的ClassName类的对象
  • 也可以使用动态内存分配来创建对象:
ClassName* ptr = new ClassName; // 创建一个指向ClassName类对象的指针
  • 在使用动态分配的对象时,需要注意在不需要该对象时使用delete运算符释放内存,以避免内存泄漏。

2.访问对象的成员

  • 通过对象可以访问类的公共成员函数和数据成员。使用点运算符.来访问对象的成员
obj.function1(); // 调用对象obj的function1成员函数
int result = obj.function2(5); // 调用function2并传入参数5,获取返回值
cout << obj.data1; // 访问对象obj的数据成员data1(假设data1是public的,否则会编译错误)
  • 如果是通过指针访问对象的成员,则使用箭头运算符->
ptr->function1();
result = ptr->function2(3);
cout << ptr->data1;

四、构造函数和析构函数

1.构造函数

  • 构造函数是一种特殊的成员函数,用于在创建对象时初始化对象的数据成员。构造函数的名称与类名相同,没有返回值类型。
  • 可以定义多个构造函数,以实现不同方式的初始化。例如:
class ClassName {
public:
    ClassName() {
        // 默认构造函数,用于初始化数据成员为默认值
        data1 = 0;
        data2 = 0.0;
    }

    ClassName(int val1, double val2) {
        // 带参数的构造函数,用于根据传入的参数初始化数据成员
        data1 = val1;
        data2 = val2;
    }
private:
    int data1;
    double data2;
};
  • 创建对象时,会自动调用相应的构造函数。例如:
ClassName obj1; // 调用默认构造函数
ClassName obj2(10, 3.14); // 调用带参数的构造函数

2.析构函数

  • 析构函数是在对象被销毁时自动调用的特殊成员函数,用于释放对象所占用的资源。析构函数的名称是在类名前加上波浪线~,没有参数和返回值类型。
  • 例如:
class ClassName {
public:
    ~ClassName() {
        // 析构函数的实现,可能用于释放动态分配的内存等资源
        // 这里假设没有动态分配的内存,只是简单的示例
    }
private:
    int* ptr; // 假设类中有一个指向整数的指针成员
};
  • 当对象超出其作用域或使用delete运算符释放动态分配的对象时,析构函数会被自动调用。例如:
{
    ClassName obj; // 在这个块内创建对象obj,当块结束时,obj会被销毁,析构函数会被调用
}

ClassName* ptr = new ClassName; // 创建动态分配的对象
//... 使用ptr指向的对象
delete ptr; // 释放对象,析构函数会被调用

五、this 指针

在类的成员函数中,经常会用到this指针。this指针是一个指向当前对象的指针,它可以用于区分成员函数中的局部变量和类的成员变量【C++】类与对象基础概念解析-LMLPHP

例如,在构造函数中: 

Car::Car(std::string brand, std::string model, std::string color) {
    this->brand = brand;
    this->model = model;
    this->color = color;
    speed = 0;
}

这里的this->brandthis->modelthis->color分别表示当前对象的brandmodelcolor成员变量。如果没有this指针,编译器将无法确定这些变量是类的成员变量还是局部变量

this指针还可以用于在成员函数中返回当前对象的引用,这在一些需要连续调用成员函数的场景中很有用。例如:

class Car {
public:
    // 其他成员函数和属性

    Car& setBrand(std::string brand) {
        this->brand = brand;
        return *this;
    }

    Car& setModel(std::string model) {
        this->model = model;
        return *this;
    }

    Car& setColor(std::string color) {
        this->color = color;
        return *this;
    }
};

现在,我们可以这样使用: 

Car myCar;
myCar.setBrand("Toyota").setModel("Corolla").setColor("Blue");

通过这种方式,我们可以更加方便地对对象进行初始化和设置属性。 

 

六、总结

在后续的文章中,我们将深入探讨类的更多特性和高级用法!


💝💝💝感谢你看到最后,点个赞再走吧!💝💝💝 

以下是一个投票,欢迎你参与,让我们一起了解大家对C++类与对象的认知和兴趣程度:

10-04 03:58