当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ Structure和Class的区别用法及代码示例


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

Class

Structure

1. 类的成员默认是私有的。 1. 结构体的成员默认是公共的。
2. 类的实例称为‘object’。 2. 结构的实例称为“结构变量”。
3.默认情况下,类的成员类/结构是私有的,但并非所有编程语言都有这种默认行为,例如Java等。 3. 结构体的成员类/结构体默认是公共的。
4. 声明使用关键词。 4. 声明使用结构体关键词。
5. 通常用于数据抽象和进一步继承。 5. 一般用于数据分组
6. 类中可以有 NULL 值。 6. NULL 值是不可能的。

7. 用法:

类class_name{

data_member;

member_function;

};

7. 用法:

结构structure_name{

输入structure_member1;

输入structure_member2;

};

详细说明这些差异的一些示例:

1) 类的成员默认是私有的,结构的成员默认是公共的。

例如,程序1编译失败,但程序2正常,

程序1:

C++


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

时间复杂度:O(1)
辅助空间:O(1)


输出:

./cf03c8d1-d4a3-43ea-a058-fe5b5303167b.cpp: In function 'int main()':
./cf03c8d1-d4a3-43ea-a058-fe5b5303167b.cpp:10:9: error: 'int Test::x' is private
     int x;
         ^
./cf03c8d1-d4a3-43ea-a058-fe5b5303167b.cpp:18:7: error: within this context
     t.x = 20;
       ^
./cf03c8d1-d4a3-43ea-a058-fe5b5303167b.cpp:10:9: error: 'int Test::x' is private
     int x;
         ^
./cf03c8d1-d4a3-43ea-a058-fe5b5303167b.cpp:20:14: error: within this context
     return t.x;
              ^

程序2:

C++


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

时间复杂度:O(1)
辅助空间:O(1)

2) 使用class关键字声明类,使用struct关键字声明结构。

用法:

class ClassName {
private:
    member1;
    member2;

public:
    member3;
    .
    .
    memberN;
};

用法:

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

3) 可以通过类和结构进行继承

例如,程序 3 和 4 运行良好。

程序3:

C++


// 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

时间复杂度:O(1)
辅助空间:O(1)

程序4:

C++


// 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

时间复杂度:O(1)
辅助空间:O(1)

要了解C结构体和C++结构体之间的区别,请参阅 this article.



相关用法


注:本文由纯净天空筛选整理自佚名大神的英文原创作品 Difference Between Structure and Class in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。