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?

网络协议文档阅读笔记-TLS vs DTLS | Difference between TLS and DTLS

C++文档阅读笔记-Understanding nullptr in C++