语法上,class和struct做类型定义时只有两点区别:
- 默认继承权限,如果不指定,来自class的继承默认是按照private继承处理,来自struct的继承默认是按照public继承处理;
- 成员的默认访问权限:class默认是private,struct默认的是public;
- “class”这个关键字还用于定义模板参 数,就像“typename”。但关键字“struct”不用于定义模板参数。
在c++中,对struct做了扩展:
- srtruct能包含成员函数;
- struct有自己的构造函数;
- struct有自己的析构函数;
- struct也是支持继承的;
- struct支持private、protected和public关键,支持多态;
struct在c++中用:
struct Test
{
public:
Test()
{
cout << "Test::Test()"<<endl;
}
virtual ~Test()
{
cout << "Test::~Test()"<<endl;
}
virtual void show()
{
cout << "Test::show()" << endl;
}
private:
int ma;
};
struct B:public Test
{
public:
B()
{
cout << "B::B()"<<endl;
}
~B()
{
cout << "B::~B()"<<endl;
}
void show()
{
cout << "B::show()"<<endl;
}
private:
int mb;
};
int main()
{
Test *t = new B();
t->show();
t->~Test();
return 0;
}
运行结果:
class用:
class A
{
public:
A()
{
cout << "A::A()"<<endl;
}
virtual ~A()
{
cout << "A::~A()"<<endl;
}
virtual void show()
{
cout << "A::show()" << endl;
}
private:
int ma;
};
class C:public A
{
public:
C()
{
cout << "C::C()"<<endl;
}
~C()
{
cout << "C::~C()"<<endl;
}
void show()
{
cout << "C::show()"<<endl;
}
private:
int mb;
};
int main()
{
A *aa = new C();
aa->show();
aa->~A();
return 0;
}
运行结果:
对比这两者的运行结果可以发现,好像c++中用struct和class的结果都是一样的。但是他们最本质的区别就在于访问控制上。struct更像是一种数据结构;而class是c++中oop思想对于实体的封装,也就是更愿意用class来实现成员的封装。在c中,只有struct,通常也是用struct来构造一种数据结构;那c++是在c的基础上发展而来的,他要兼容c的一些用法,又要实现自己的,所以在c的基础上他对于struct进行了如上的扩展。