当前位置:首页 C++ > 正文

C++中结构体和类的区别

作者:野牛程序员:2023-07-01 19:16:12 C++阅读 2791

在C++中,结构体(struct)和类(class)是两种用于定义自定义类型的关键字。尽管它们在语法上非常相似,但它们在语义上有一些区别。

  1. 默认访问权限:在类中,默认情况下,成员和基类是私有的(private),而在结构体中,默认情况下,成员和基类是公有的(public)。这意味着在结构体中的成员可以直接访问,而在类中需要使用访问器(getter)和设置器(setter)方法。

示例:

struct MyStruct {
    int x; // 默认为公有成员
};

class MyClass {
    int x; // 默认为私有成员
};
  1. 继承方式:结构体可以通过关键字struct进行继承,而类可以通过关键字class进行继承。然而,在C++中,通常更倾向于使用类来进行继承,因为它提供了更多的特性,如多态和虚函数。

示例:

struct DerivedStruct : BaseStruct {
    // ...
};

class DerivedClass : public BaseClass {
    // ...
};
  1. 类型定义:结构体和类可以用作定义新类型的基础。例如,可以使用结构体或类创建对象,并将其用作函数参数或返回值。

示例:

struct Point {
    int x;
    int y;
};

class Rectangle {
    int width;
    int height;
};

void foo(Point p) {
    // ...
}

Rectangle createRectangle() {
    // ...
}

总的来说,结构体和类在语法上非常相似,但它们的默认访问权限和继承方式略有不同。在C++中,类是更为强大和常用的机制,用于面向对象编程和数据封装,而结构体通常更适用于简单的数据聚合。然而,这些是一般约定,并不意味着结构体不能拥有函数成员或类不能拥有公共成员。

当涉及到简单的数据聚合时,使用结构体是合适的。例如,我们可以使用结构体来表示一个点的坐标:

struct Point {
    int x;
    int y;
};

// 创建一个Point结构体对象
Point p1;
p1.x = 10;
p1.y = 20;

// 结构体对象作为函数参数
void printPoint(Point p) {
    cout << "x: " << p.x << ", y: " << p.y << endl;
}

printPoint(p1);  // 输出:x: 10, y: 20

另一方面,类通常用于更复杂的对象建模,具有数据和与之相关的操作。例如,我们可以使用类来定义一个图形的矩形:

class Rectangle {
private:
    int width;
    int height;

public:
    Rectangle(int w, int h) {
        width = w;
        height = h;
    }

    int calculateArea() {
        return width * height;
    }

    void setWidth(int w) {
        width = w;
    }

    void setHeight(int h) {
        height = h;
    }
};

// 创建一个Rectangle类对象
Rectangle rect(5, 7);

// 调用类的成员函数
int area = rect.calculateArea();  // 计算矩形的面积
cout << "Area: " << area << endl;  // 输出:Area: 35

rect.setWidth(10);  // 设置矩形的宽度
rect.setHeight(8);  // 设置矩形的高度
area = rect.calculateArea();  // 再次计算面积
cout << "Area: " << area << endl;  // 输出:Area: 80

在这个例子中,类提供了更多的功能,如计算面积和设置宽度/高度的方法,以及私有的数据成员。这使得类更适合于表示具有行为和状态的对象。

需要注意的是,这只是结构体和类的典型用法示例。实际上,结构体也可以包含成员函数,类也可以具有公共成员。具体使用哪个关键字取决于数据的复杂性和对象的行为。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击