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