c++ class struct同名_C结构和C++结构之间的区别

4c0912f45282055640d78e8fb3ef4c17.png

在C++中,struct和class完全相同,除了struct默认为公共可见性和class默认为私有可见性。

C和C++结构之间的一些重要区别:

1. 结构内部的成员函数:C中的结构不能在结构内部具有成员函数,但是C++中的结构可以与数据成员一起具有成员函数。

2. 直接初始化:我们无法在C中直接初始化结构数据成员,但可以在C++中完成。

C代码:

// C program to demonstrate that direct // member initialization is not possible in C #include    struct Record {     int x = 7; };   // Driver Program int main() {     struct Record s;     printf("%d", s.x);     return 0; } /* Output :  Compiler Error    6:8: error: expected ':', ', ', ';', '}' or    '__attribute__' before '=' token   int x = 7;         ^   In function 'main': */

C++代码:

// CPP program to initialize data member in c++ #include  using namespace std;   struct Record {     int x = 7; };   // Driver Program int main() {     Record s;     cout << s.x << endl;     return 0; } // Output // 7 

输出:

7

3. 使用struct关键字:在C语言中,我们需要使用struct来声明一个struct变量。 在C++中,没有必要使用struct。例如,Record结构。在C语言中,对于Record变量,必须使用“ struct Record”。 在C++中,我们无需使用struct,而仅使用“Record”即可。

4. 静态成员:C结构不能具有静态成员,但C++允许。

C代码:

// C program with structure static member struct Record {     static int x; };   // Driver program int main() {     return 0; } /* 6:5: error: expected specifier-qualifier-list     before 'static'      static int x;      ^*/

C++代码:

// C++ program with structure static member   struct Record {     static int x; };   // Driver program int main() {     return 0; }

这将在C中产生一个错误,但在C++中不会产生任何错误。

5. 在结构中创建构造函数:C中的结构不能在结构内部具有构造函数,但是C++中的结构可以具有构造函数创建。

C代码:

// C program to demonstrate that Constructor is not allowed #include    struct Student {     int roll;     Student(int x)     {         roll = x;     } };   // Driver Program int main() {     struct Student s(2);     printf("%d", s.x);     return 0; } /* Output :  Compiler Error    [Error] expected specifier-qualifier-list      before 'Student'    [Error] expected declaration specifiers or     '...' before numeric constant    [Error] 's' undeclared (first use     5555555555in this function)    In function 'main': */

C++代码:

// CPP program to initialize data member in c++ #include  using namespace std;   struct Student {     int roll;     Student(int x)     {         roll = x;     } };   // Driver Program int main() {     struct Student s(2);     cout << s.roll;     return 0; } // Output // 2 

输出:

2

6. sizeof运算符:此运算符将为C中的空结构生成0,而为C++中的空结构生成1。

// C program to illustrate empty structure #include    // empty structure struct Record { };   // Driver program int main() {     struct Record s;     printf("%d", sizeof(s));     return 0; } 

在C中的输出:

0

在C++中的输出:

1

7. 数据隐藏:C结构不允许数据隐藏的概念,但是在C++中是允许的,因为C++是一种面向对象的语言,而C语言则不是。

8. 访问修饰符:C结构没有访问修饰符,因为语言不支持这些修饰符。由于C++结构是用语言内置的,因此可以具有此概念。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值