类(class)与结构体(struct)的区别
引入C语言的结构体,是为了保证和c程序的兼容性。
c语言中的结构体不允许定义函数成员,且没有访问控制权限的属性。
c++为结构体引入了成员函数,访问控制权限,继承,多态等面向对象特性。
c语言中,空结构体的大小为0,而C++中空结构体大小为1。
class可以使用模版,而struct不能。
**
class中成员默认是private
struct中的成员默认是public。
·class继承默认是private继承,
而struct继承默认是public继承。
例如
struct A
{
char a;
};
struct B : A
{
char b;
};
这个时候B是public继承A的。
平时一般都这样写
struct B : public A
如果都将上面的struct改成class,那么B是private继承A的。这就是默认的继承访问权限。
class A
{
char a;
};
class B : A
{
char b;
};
平时一般都这样写
class B: private A
当然,到底默认是public继承还是private继承,取决于子类而不是基类。struct可以继承class,同样class也可以继承struct,那么默认的继承访问权限是看子类到底是用的struct还是class。
举个例子:
struct A{};
class B : A{}; //private继承
struct C : B{}; //public继承
下面例子更能说明
#include <bits/stdc++.h>
using namespace std;//结构体访问权限为public
struct person
{
void show();
string name;
int age;
};
int main () {
person p;
p.name = "FG";
p.age = 666;
cout << "name" << p.name << "age=" << p.age << endl;
return 0;
}
struct变成class就会出错
将struct 改成class的时候,访问控制由public变为private了,那当然就不能用{}来赋初值了。加上一个public,你会发现,class也是能 用{}的,和struct毫无区别。
#include <bits/stdc++.h>
using namespace std;//结构体访问权限为public
class person
{
public:
void show();
string name;
int age;
};
int main () {
person p;
p.name = "FG";
p.age = 666;
cout << "name=" << p.name << ' ' << "age=" << p.age << endl;
return 0;
}
struct和class的“唯一”区别就是访问控制。很多文献上也确实只提到这一个区别。