欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c++ struct和class的用法总结

程序员文章站 2022-04-28 19:29:21
...

由于自己是直接系统学习的c++,所以对struct的用法还是很模糊,感觉它就是不如class,但是具体有哪些不同,除了知道默认访问权限不同,就不知道别的,所以还是有必要总结一番。

1、c和c++中struct的区别
c中的struct没有成员函数,而c++中的struct是对c中的struct进行了扩充,所以增加了很多功能,可以说跟class已经有很多相似之处。且在c中使用结构体时需要加上struct,或者对结构体使用typedef取别名,而c++可直接使用。

//结构体声明,C和C++使用同一个
struct Student
{
	int  iAgeNum;
	string strName;
}
typedef struct Student Student2;//c中取别名

struct Student stu1; //c中正常使用
Student2 stu2; //c中通过取别名的使用

Student stu3; //c++使用

由于c和c++语言的特点,在c中结构体就是不同类型数据的集合,并不涉及算法和操作,而c++是把数据变量及对这些数据变量的相关算法和操作给封装起来。

1、c++中struct和class的区别
a. struct默认的访问属性是public,而class默认的访问属性是private。

struct A
{
	int num;
};
class B
{
	int num;
};


int main()
{
	A a;
	a.num = 2;	//没有问题,默认访问属性为public
	B b;
	b.num = 2;	//编译出错,默认访问属性为private

	return 0;
}

b. 在继承关系中,struct默认是public的,而class是private,不过不建议这样写,一般都是写明继承的方式。

struct A
{
	int aNum;
};
struct B : A
{
	int bNum;
};
class B : public A{}struct B : public A{}int main()
{
	A a;
	a.aNum = 1;	//在struct情况下是正确的,在class情况下是错误的

	return 0;
}

c. class这个关键字还可用于定义模板参数,就像typename,但是strcut不用与定义模板参数。

template< typename T, typename Y >	//可以把typename换成class
int Func( const T& t, const Y& y )
{
	//TODO
}

d. 赋初值问题,c中对struct赋初值可以用{}的形式,而在c++中的class则不行,需要调用构造函数。(所以说,加入一个构造函数或是一个虚函数会使strcut更体现出一种对象的特性)

struct A
{
	char c1;
	int	i2;
	double	db3;
};

A a = {'p', 7, 451.154}; //定义时赋初值,在struct时没问题,在class时出错

总结:什么时候用struct,什么时候用class呢?
如果更像是一种数据结构集合的话,那么用struct(比如一个基函数,里面只需要几个变量的那种),如果你要做的更像是一种对象的话,那么用class(里面涉及到成员变量、构造函数、析构函数等)。