📜  C 结构和 C++ 结构的区别(1)

📅  最后修改于: 2023-12-03 14:39:42.015000             🧑  作者: Mango

C结构和C++结构的区别

C语言和C++语言都支持结构体,但是两者之间还是有一些差别的。本文将从以下几个方面来介绍C结构和C++结构的区别。

定义方式

在C语言中,定义一个结构体的方式如下:

struct student {  
    char name[20];  
    int age;  
    float score;  
};  

而在C++中,定义一个结构体的方式如下:

struct student {  
    char name[20];  
    int age;  
    float score;  
};  

可以看到,C++中定义结构体时可以省略struct关键字,而在C语言中则必须加上struct关键字。

默认可见性

在C语言中,结构体的所有成员都是默认为公共的(public),也就是说可以被外部访问到。而在C++中,结构体默认所有成员为私有(private),需要通过publicprotected关键字来显式声明为公共或保护的。

构造函数和析构函数

C语言中的结构体并不支持构造函数和析构函数,因此无法对成员进行初始化和清理工作。而在C++中,结构体也是一个类,支持构造函数和析构函数,可以在构造函数中对成员进行初始化,在析构函数中进行清理。

下面是一个简单的例子,展示了C++中结构体的构造函数和析构函数:

#include <iostream>

struct student {
    char name[20];
    int age;
    float score;

    // 构造函数
    student() {
        name[0] = '\0';
        age = 0;
        score = 0.0f;
        std::cout << "构造函数被调用" << std::endl;
    }

    // 析构函数
    ~student() {
        std::cout << "析构函数被调用" << std::endl;
    }
};

int main() {
    student s;
    return 0;
}

运行结果为:

构造函数被调用 
析构函数被调用
成员函数

C++中结构体可以定义成员函数,而C语言中的结构体没有这个功能。对于成员函数,C++中的结构体和类是没有什么区别的。

继承

C++中结构体可以使用继承来获得其它类的成员,而C语言中的结构体不支持继承。

下面是一个简单的例子,展示了C++中结构体的继承:

struct person {
    char name[20];
    int age;
};

struct student : public person {
    float score;
};

在上述代码中,student继承了person的成员,因此student可以使用nameage成员。

总结

综上所述,C语言和C++语言的结构体在语法和功能上有一些区别。如果你需要使用到结构体的高级特性,那么C++中的结构体可能更加适合你的需求。