C++文档阅读笔记-Difference Between C Structures and C++ Structures
Posted IT1995
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++文档阅读笔记-Difference Between C Structures and C++ Structures相关的知识,希望对你有一定的参考价值。
这里来讨论struct在C和C++的异同。在C++中struct和class极其相似。
C和C++的不同
C结构体 | C++结构体 |
只有成员变量,没有成员函数。 | 不仅有成员变量,还有成员函数。 |
不运行构造函数。 | 可以使用构造函数。 |
不能使用静态成员。 | 可以使用静态成员。 |
不能直接初始化成员变量。 | 可以直接初始化成员变量。 |
定义结构体变量时需要加上“struct”关键字 | 定义结构体变量时不需要加“struct”关键字 |
不能使用修饰符。 | 支持修饰符。 |
仅可以使用指针类型。 | 不仅能使用指针,还能使用引用类型。 |
空结构体,使用sizeof输出为0。 | 空结构体,使用sizeof输出为1。 |
不支持隐式转换。 | 支持隐式转换。 |
C和C++结构体相似之处
C和C++在结构体中成员都是public的。
下面对C和C++中不同的地方进行讨论
1.结构体中的成员函数:C中不允许有成员函数,但C++可以有,如下例子:
C代码:
// C Program to Implement Member
// functions inside structure
#include <stdio.h>
struct marks
int num;
// Member function inside Structure to
// take input and store it in "num"
void Set(int temp) num = temp;
// function used to display the values
void display() printf("%d", num);
;
// Driver Program
int main()
struct marks m1;
// calling function inside Struct to
// initialize value to num
m1.Set(9);
// calling function inside struct to
// display value of Num
m1.display();
输出:
This will generate an error in C but no error in C++.
C++代码:
// C++ Program to Implement Member functions inside
// structure
#include <iostream>
using namespace std;
struct marks
int num;
// Member function inside Structure to
// take input and store it in "num"
void Set(int temp) num = temp;
// function used to display the values
void display() cout << "num=" << num;
;
// Driver Program
int main()
marks m1;
// calling function inside Struct to
// initialize value to num
m1.Set(9);
// calling function inside struct to
// display value of Num
m1.display();
输出:
num=9
2.静态成员:C结构体中不能使用静态成员,但C++结构体可以。
C代码:
// C program with structure static member
struct Record
static int x;
;
// Driver program
int main() return 0;
C++代码:
// C++ program with structure static member
struct Record
static int x;
;
// Driver program
int main() return 0;
这段代码在C中会报错,但在C++中不会。
3.构造函数:C语言中结构体不能有构造函数,但C++结构体中有构造函数。
C代码:
// C program to demonstrate that
// Constructor is not allowed
#include <stdio.h>
struct Student
int roll;
Student(int x) roll = x;
;
// Driver Program
int main()
struct Student s(2);
printf("%d", s.x);
return 0;
C++代码:
// CPP program to initialize data member in c++
#include <iostream>
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;
C代码会报错,C++不会,C++输出如下:
2
4.直接初始化:C结构体不能直接初始化,但C++结构体可以。
C代码:
// C program to demonstrate that direct
// member initialization is not possible in C
#include <stdio.h>
struct Record
int x = 7;
;
// Driver Program
int main()
struct Record s;
printf("%d", s.x);
return 0;
C++代码:
// CPP program to initialize data member in c++
#include <iostream>
using namespace std;
struct Record
int x = 7;
;
// Driver Program
int main()
Record s;
cout << s.x << endl;
return 0;
C语言代码会报错,C++输出如下:
7
5.使用struct关键字:在C代码中定义结构体要在前面加一个struct关键字,但C++代码不需要,比如C语言中定义这个结构体“struct Record”,而在C++中可直接“Record”。
6.访问修饰:C结构体无访问修饰符,因为C语言不支持。但C++结构体支持。
7.指针和引用:C++不仅仅可以使用指针类型结构体,还能用引用类型结构体,C语言只能用指针。
8.sizeof操作:C语言空struct使用sizeof输出为0,C++空struct使用sizeof输出为1。
C代码:
// C program to illustrate empty structure
#include <stdio.h>
// empty structure
struct Record
;
// Driver Code
int main()
struct Record s;
printf("%lu\\n", sizeof(s));
return 0;
C++代码:
// C++ program to illustrate empty structure
#include <iostream>
using namespace std;
// empty structure
struct Record
;
// Driver program
int main()
struct Record s;
cout << sizeof(s);
return 0;
// This code is contributed by Shubham Sharma
C输出:
0
C++输出:
1
意:sizeof返回值是long unsigned int,所以C语言中使用“%lu”而不是“%d”。
以上是关于C++文档阅读笔记-Difference Between C Structures and C++ Structures的主要内容,如果未能解决你的问题,请参考以下文章
C++文档阅读笔记-Difference Between C Structures and C++ Structures
Qt文档阅读笔记-Qt, QML, Widgets…What Is The Difference?
Qt文档阅读笔记-Qt, QML, Widgets…What Is The Difference?
Qt文档阅读笔记-Qt, QML, Widgets…What Is The Difference?