在 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.
相关用法
- C++ String Assign()用法及代码示例
- C++ String Data()用法及代码示例
- C++ String Find()用法及代码示例
- C++ String append()用法及代码示例
- C++ String at()用法及代码示例
- C++ String back()用法及代码示例
- C++ String begin()用法及代码示例
- C++ String c_str()用法及代码示例
- C++ String capacity()用法及代码示例
- C++ String cbegin()用法及代码示例
- C++ String cend()用法及代码示例
- C++ String clear()用法及代码示例
- C++ String compare()用法及代码示例
- C++ String copy()用法及代码示例
- C++ String crbegin()用法及代码示例
- C++ String crend()用法及代码示例
- C++ String empty()用法及代码示例
- C++ String end()用法及代码示例
- C++ String erase()用法及代码示例
- C++ String find_first_not_of()用法及代码示例
- C++ String find_first_of()用法及代码示例
- C++ String find_last_not_of()用法及代码示例
- C++ String find_last_of()用法及代码示例
- C++ String front()用法及代码示例
- C++ String insert()用法及代码示例
注:本文由纯净天空筛选整理自佚名大神的英文原创作品 Difference Between Structure and Class in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。