c++中的结构体vs类

c++中的结构体vs类

在c++中,结构体与类的工作方式相同,除了两个小的差异。其中最重要的是隐藏实现细节。默认情况下,结构体不会对代码中使用它的人隐藏其实现细节,而类默认情况下隐藏其所有实现细节,因此默认情况下将阻止程序员访问它们。下表总结了所有的基本差异。

结构体
默认情况下,类的成员是private的。 默认情况下,结构体的成员是public的。
默认情况下,类的成员类/结构是private的。 默认情况下,结构体的成员类/结构体是public的。
它是用class关键字声明的。 它是使用struct关键字声明的。
它通常用于数据抽象和进一步继承。 它通常用于数据分组

下面举几个例子来说明这些差异:

默认情况下,类的成员是private的,结构体的成员是public的

例如,程序1编译失败,但程序2运行良好,

程序1:

// Program 1
// C++ Program to demonstrate that
// Members of a class are private
// by default
using namespace std;
 
class Test {
    // x is private
    int x;
};
 
int main()
{
    Test t;
    t.x = 20; // compiler error because x
              // is private
   
    return t.x;
}

输出:

prog.cpp: In function ‘int main()’:
prog.cpp:8:9: error: ‘int Test::x’ is private
    int x;
        ^
prog.cpp:13:7: error: within this context
    t.x = 20;
      ^

程序2:

// Program 2
// C++ Program to demonstrate that
// members of a structure are public
// by default.
#include <iostream>
 
struct Test {
    // x is public
    int x;
};
 
int main()
{
    Test t;
    t.x = 20;
   
    // works fine because x is public
    std::cout << t.x;
}

输出

20

类使用class关键字声明,结构体使用struct关键字声明

语法:

class ClassName {
private:
    member1;
    member2;

public:
    member3;
    .
    .
    memberN;
};

语法:

struct StructureName {
    member1;
    member2;
    .
    .
    .
    memberN;
};

类和结构体都可以继承

例如,程序3和4工作得很好。

程序3:

// Program 3
// C++ program to demonstrate
// inheritance with classes.
#include <iostream>
using namespace std;
 
// Base class
class Parent {
public:
    int x;
};
 
// Subclass inheriting from
// base class (Parent).
class Child : public Parent {
public:
    int y;
};
 
int main()
{
    Child obj1;
   
    // An object of class Child has
    // all data members and member
    // functions of class Parent.
    obj1.y = 7;
    obj1.x = 91;
    cout << obj1.y << endl;
    cout << obj1.x << endl;
 
    return 0;
}

输出

7
91

程序4:

// Program 4
// C++ program to demonstrate
// inheritance with structures.
#include <iostream>
using namespace std;
 
struct Base {
public:
    int x;
};
 
// is equivalent to
// struct Derived : public Base {}
struct Derived : Base {
public:
    int y;
};
 
int main()
{
    Derived d;
   
    // Works fine because inheritance
    // is public.
    d.x = 20;
    cout << d.x;
    cin.get();
    return 0;
}

输出

20

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程