类与结构体有什么区别?

依然做自己的软件 2009-07-31 07:20:04
类与结构体有什么区别?突然想起以前做过的一道面试题,求答,谢谢!
...全文
4637 56 打赏 收藏 转发到动态 举报
写回复
用AI写文章
56 条回复
切换为时间正序
请发表友善的回复…
发表回复
destiny_aqua 2012-07-05
  • 打赏
  • 举报
回复
貌似还有一个不同,结构体里面没有this指针吧。
  • 打赏
  • 举报
回复
1、 c语言有结构体,但C的结构体没有类方法。
2、在C++中,结构体与类相同,只是结构体的成员默认为公有成员。你可以像声明类一样声明一个结构体,并使其有相同的数据成员和函数。(C++的创始人Bjarne Stroustrup创建了高级的结构体,为了表明其新的扩展功能,他将其命名为类。)
分子引力 2011-07-05
  • 打赏
  • 举报
回复
1.类中能定义函数而结构体不能
2.类中数据有访问权限,结构体中可随意访问
透明的玻璃杯 2011-03-31
  • 打赏
  • 举报
回复
在C++中有三点区别:
(1)class中默认的成员访问权限是private的,而struct中则是public的。
(2)从class继承默认是private继承,而从struct继承默认是public继承。
(3 ) class 可以做模板参数,但strcut不可以。
BuleRiver 2009-08-03
  • 打赏
  • 举报
回复
[Quote=引用 48 楼 misol 的回复:]
引用 9 楼 steedhorse 的回复:
C++的class跟C的struct区别太多太多,就不一一列举了。

但C++的class和C++的struct之间区别很小,只有两点:
(1)默认的成员访问权限,前者是private,后者是public;
(2)默认的继承权限,来自class的继承默认为private继承,来自struct的继承默认是public继承。


汗。。struct居然在你这可以继承!!
[/Quote]
struct 当然可以继承
BuleRiver 2009-08-03
  • 打赏
  • 举报
回复
只有一点不同:默认状态下,类的成员是private,结构体是public
misol 2009-08-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 steedhorse 的回复:]
C++的class跟C的struct区别太多太多,就不一一列举了。

但C++的class和C++的struct之间区别很小,只有两点:
(1)默认的成员访问权限,前者是private,后者是public;
(2)默认的继承权限,来自class的继承默认为private继承,来自struct的继承默认是public继承。
[/Quote]

汗。。struct居然在你这可以继承!!
ysysbaobei 2009-08-03
  • 打赏
  • 举报
回复
顶下
xiaojinming2008 2009-08-03
  • 打赏
  • 举报
回复
其实:在C++中struct 与 class没有什么区别;
譬如:

struct tagSt
{
int a;
int b;
int add()
{
return a + b;
}
private:
int x;
public:
void setX(int x1)
{
x = x1;
}
int getX()
{
return x;
}
};

struct tagSt1 : public tagSt
{
private:
int xy;
public:
void setXY(int t)
{
xy = t;
}
int getXY()
{
return xy;
}

};
int _tmain(int argc, _TCHAR* argv[])
{
struct tagSt1 stA ;
stA.a = 10;
stA.b = 12;
int x = stA.add();
printf("%d\r\n", x);
stA.setX(x+10);
printf("%d\r\n", stA.getX());
stA.setXY(x+20);
printf("%d\r\n", stA.getXY());
return 0;
}
dukong123 2009-08-03
  • 打赏
  • 举报
回复
默认保护解别不一样,其他都一样!
但一般结构体用来放纯数据的集合。
晨星 2009-08-02
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 datamining123 的回复:]
类的new,delete会自动调用构造函数、析构函数;结构体不这样。
[/Quote]
不是的。
不信你跑一跑这个程序试试看:
#include <iostream>

struct Test {
Test() { std::cout << "Test." << std::endl; }
~Test() { std::cout << "~Test." << std::endl; }
};

int main() {
delete new Test;
return 0;
}
datamining123 2009-08-02
  • 打赏
  • 举报
回复
类的new,delete会自动调用构造函数、析构函数;结构体不这样。
ToBeTough 2009-08-02
  • 打赏
  • 举报
回复
学 !
lijieqingru 2009-08-02
  • 打赏
  • 举报
回复
可不是吗?我说的确实是c#的,呵呵。不好意思了
mstlq 2009-08-02
  • 打赏
  • 举报
回复
41楼在拿c的struct和c++的class做对比……
szqh97 2009-08-02
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 wangtengchao 的回复:]
类是C++对C中结构体的发展,类包含结构体的所有功能。
但是结构体只能包含数据
类可以包含函数等
[/Quote]
不对吧,今天上午我刚试过,结构体里也可以由构造函数和其他函数的,只是默认的访问权限不同而已
szqh97 2009-08-02
  • 打赏
  • 举报
回复
在C++中struct和class只是默认访问不同,其余的都是一样的。
zyq1600356618 2009-08-02
  • 打赏
  • 举报
回复
把39楼的代码扩充下, 可以反驳34楼的部分发言:
#include <iostream>

struct Test {
//private:
Test() { std::cout << "Test." << std::endl; }
virtual v_proc(){std::cout << "Test.v_proc." << std::endl; }
~Test() { std::cout << "~Test." << std::endl; }
int operator +(const int a){return a+1;}
};
struct Test_CH : public Test
{
//private:
Test_CH() { std::cout << "Test_CH." << std::endl; }
virtual v_proc(){std::cout << "Test_CH.v_proc." << std::endl; }
~Test_CH() { std::cout << "~Test_CH." << std::endl; }
};

class CTest {
public:
CTest(){std::cout << "CTest." << std::endl;}
~CTest(){std::cout << "~CTest." << std::endl;}
};

int main() {
Test *o_Test;
o_Test=new Test;
o_Test->v_proc();
std::cout << "o_Test->operator +(5)="<<o_Test->operator+(5)<< std::endl;
delete o_Test;

Test_CH *o_Test_CH;
o_Test_CH=new Test_CH;
o_Test_CH->v_proc();
std::cout << "o_Test_CH->operator +(6)="<<o_Test_CH->operator+(6)<< std::endl;
delete o_Test_CH;

CTest *o_CTest;
o_CTest=new CTest;
delete o_CTest;
return 0;
}

运算结果为:
Test.
Test.v_proc.
o_Test->operator +(5)=6
~Test.
Test.
Test_CH.
Test_CH.v_proc.
o_Test_CH->operator +(6)=7
~Test_CH.
~Test.
CTest.
~CTest.
Press any key to continue
超gogo 2009-08-02
  • 打赏
  • 举报
回复
类是C++对C中结构体的发展,类包含结构体的所有功能。
但是结构体只能包含数据
类可以包含函数等
starcat 2009-08-01
  • 打赏
  • 举报
回复
哈哈,还没学到那里。

上次看到一位版主的评论了,看不懂接着看。

相信通过多思考多写代码总能搞清楚的。
加载更多回复(36)

64,701

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧