📜  C++ |其他C++ |问题5(1)

📅  最后修改于: 2023-12-03 15:13:58.073000             🧑  作者: Mango

C++ | 其他C++ | 问题5

介绍

在C++中,我们能够很容易地创建各种数据类型并对其进行简单操作。然而,在某些情况下,我们需要创建一个自定义的数据类型,以便更好地表示我们正在解决的问题。在这种情况下,我们可以使用C++中的类(class)和结构体(struct)来实现。本文将介绍C++中类和结构体的概念和使用,并提供一些示例代码和常见问题的解决方法。

类和结构体

类和结构体都是用户定义的数据类型,它们可以包含变量(成员变量)和函数(成员函数)。它们的主要区别在于默认的访问权限和继承方式。在结构体中,默认的访问权限是public,在类中则是private。此外,结构体中不能使用继承,而类可以使用公共、保护和私有继承。下面是创建一个简单类和结构体的示例。

// 定义一个结构体
struct Person {
    std::string name;
    int age;
};

// 定义一个类
class Rectangle {
public:
    double width;
    double height;

    double get_area() {
        return width * height;
    }
};
成员函数

类和结构体中的成员函数是在类或结构体中定义的函数。它们被用来操作类或结构体的成员变量。成员函数具有一个特殊的指针this,它指向正在调用该函数的对象的地址。下面是一个计算矩形面积的示例:

class Rectangle {
public:
    double width;
    double height;

    double get_area() {
        return width * height;
    }
};
构造函数和析构函数

类和结构体也可以定义构造函数和析构函数。构造函数用于初始化类或结构体的成员变量,而析构函数在对象被销毁时执行一些清理工作。下面是在Rectangle类中定义无参构造函数和析构函数的示例:

class Rectangle {
public:
    double width;
    double height;

    Rectangle() {
        width = 0;
        height = 0;
    }

    ~Rectangle() {
        std::cout << "Rectangle destroyed" << std::endl;
    }

    double get_area() {
        return width * height;
    }
};
常见问题和解决方案
如何访问类或结构体的成员变量?

类或结构体中的成员变量通过.操作符来访问。例如:

Rectangle r;
r.width = 10;
r.height = 5;
如何访问类或结构体的成员函数?

类或结构体中的成员函数通过.操作符来访问。例如:

Rectangle r;
r.width = 10;
r.height = 5;
double area = r.get_area();
如何在类或结构体的成员函数中访问this指针?

this指针在类或结构体的成员函数中自动被定义。例如:

class Rectangle {
public:
    double width;
    double height;

    double get_area() {
        return this->width * this->height;
    }
};
如何定义一个有参构造函数?

有参构造函数的定义与普通函数的定义类似。例如:

class Rectangle {
public:
    double width;
    double height;

    Rectangle(double w, double h) {
        width = w;
        height = h;
    }

    double get_area() {
        return width * height;
    }
};

// 使用有参构造函数创建对象
Rectangle r(10, 5);
如何使用继承?

在C++中,类可以使用公有(public)、保护(protected)和私有(private)继承。这些关键字指定了从基类中派生出的派生类中的成员的可访问性。例如:

class Shape {
public:
    virtual double get_area() = 0;
};

class Rectangle : public Shape {
public:
    double width;
    double height;

    Rectangle(double w, double h) {
        width = w;
        height = h;
    }

    double get_area() {
        return width * height;
    }
};

在上面的示例中,Rectangle类公开继承Shape类,并实现Shape类中的get_area()函数。