![4c0912f45282055640d78e8fb3ef4c17.png](https://i-blog.csdnimg.cn/blog_migrate/d7cc176316e09d410be238365e53e844.jpeg)
在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++结构是用语言内置的,因此可以具有此概念。