C++中class与struct的区别

我初学程序,感觉只要是class能做的事,struct也可以,反过来也是,那用一个就行了,为什么要有两个啊?他们的主要区别在哪?望各位高手指点~~... 我初学程序,感觉只要是class能做的事,struct也可以,反过来也是,那用一个就行了,为什么要有两个啊?他们的主要区别在哪?望各位高手指点~~ 展开
 我来答
吉祥二进制
高粉答主

推荐于2017-10-10 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84583

向TA提问 私信TA
展开全部

  1、默认的继承访问权限。struct是public的,class是private的。比如如下的代码:

  struct A
  {
  char a;
  };
  struct B : A
  {
  char b;
  };

  这个时候B是public继承A的。如果都将上面的struct改成class,那么B是private继承A的。这就是默认的继承访问权限。所以在平时写类继承的时候,通常会这样写:

 struct B : public A

  就是为了指明是public继承,而不是用默认的private继承。当然,到底默认是public继承还是private继承,取决于子类而不是基类。我的意思是,struct可以继承class,同样class也可以继承struct,那么默认的继承访问权限是看子类到底是用的struct还是class。如下:

 struct A{};
  class B : A{};    //private继承
  struct C : B{};  //public继承

  2、struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的。

  3、class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数。

  4、还是上面所说的,C++中的struct是对C中的struct的扩充,既然是扩充,那么它就要兼容过去C中struct应有的所有特性。例如你可以这样写:

    struct A    //定义一个struct
  {
  char c1;
  int  n2;
  double db3;
  };
  A a={'p',7,3.1415926};  //定义时直接赋值

  也就是说struct可以在定义的时候用{}赋初值。


  如上面的struct中加入一个构造函数,struct也不能用{}赋初值了。以{}的方式来赋初值,只是用一个初始化列表来对数据进行按顺序的初始化,如上面如果写成A a={'p',7};则c1,n2被初始化,而db3没有。这样简单的copy操作,只能发生在简单的数据结构上,而不应该放在对象上。加入一个构造函数或是一个虚函数会使struct更体现出一种对象的特性,而使此{}操作不再有效。事实上,是因为加入这样的函数,使得类的内部结构发生了变化。

  到这里,可以发现即使是struct想用{}来赋初值,它也必须满足很多的约束条件,这些条件实际上就是让struct更体现出一种数据机构而不是类的特性。那为什么在上面仅仅将struct改成class,{}就不能用了呢?其实问题恰巧是之前所讲的——访问控制!如果将struct改成class的时候,访问控制由public变为private了,那当然就不能用{}来赋初值了。加上一个public,你会发现,class也是能用{}的,和struct毫无区别!


  从上面的区别,可以看出,struct更适合看成是一个数据结构的实现体,class更适合看成是一个对象的实现体。

  

MOJi辞書
推荐于2017-09-10 · TA获得超过387个赞
知道小有建树答主
回答量:223
采纳率:0%
帮助的人:141万
展开全部
同意一楼、二楼的
说实在的,如果不是为了实现继承、虚函数等特性来更便捷的管理拓展程序、
节省开发时间之类,是不会使用class的,这才是class的实质:
归纳总结,抽象出综合特性以实现统一管理。
其他的多可以使用structure
(以上纯属个人观点,呵呵)
稍微写了点代码,辅助理解
#include<iostream>
using namespace std;

struct s
{
private:
int x;
public:
s(int t=0)
{
x=t;
}
/*void input(int t)
{
x=t;
}*/
void output()
{
cout<<x;
}
};

class c
{
private:
int x;
public:
c(int t=0)
{
x=t;
}
void output()
{
cout<<x;
}
};

int main()
{
s os(2);
//os.x=3;//error C2248: 's::x' : cannot access private member declared in class 's'
//os.input(2);
os.output();
cout<<endl;

c oc(2);
oc.output();
cout<<endl;

return 0;
}

可见,structure也可以有私有成员,函数等
并且也可以有构造函数

希望对你有所帮助
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
diwayou
2010-03-16 · 超过18用户采纳过TA的回答
知道答主
回答量:55
采纳率:100%
帮助的人:45.3万
展开全部
保留struct主要是为了兼容C,
他俩的不同只是struct默认所有属性和方法是public的,而class默认是private,只有这一点不同
但是人们一般把有方法的结构定义成class,而只有数据,没有方法的结构定义成struct,但是这也只是程序员们的爱好
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
女儿飞
2010-03-16 · TA获得超过483个赞
知道小有建树答主
回答量:440
采纳率:0%
帮助的人:354万
展开全部
基本没区别
区别就是class不声明为public是就默认为private
而struct不声明为private就默认为public
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
丨花自飘零丨
2010-03-16 · TA获得超过598个赞
知道小有建树答主
回答量:417
采纳率:0%
帮助的人:357万
展开全部
最重要一点:class可以实现对数据的保护(它有private,protect);
另外它还可以包含函数...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式