大家来讨论:关于c语言中结构的问题

mjfsun 2003-10-15 11:38:28
与同事争论:c语言中结构定义时成员能不能有函数。

本人观点:不能有,也没有必要。我查了好多资料没有相应的解释,望各位高手指点一下。谢谢!
...全文
64 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
Liulingbing 2003-10-18
  • 打赏
  • 举报
回复
C语言中绝对没有,这是标准。
C++中不知道标准怎么定的,不过,struct和class的功能几乎很相似了。
完全可以在struct写函数,而且类可以继承struct,反过来还没试过。
上面也有人说了,它们的默认存取级别不同。
不过,依照习惯,我想不会有人编一个struct还提供接口,如果是这样,那他恐怕写的是class。
ZhouHM 2003-10-18
  • 打赏
  • 举报
回复
c语言中结构定义时成员不能有函数,但是可以有函数指针
Wolf0403 2003-10-18
  • 打赏
  • 举报
回复
C 中的结构只能包含数据(包括函数指针),不能包含成员函数。C 中没有“成员函数”的概念,同样也没有继承和封装的概念,因为 C 不是 OO 的。
C++ 中的结构(struct )和 C 的 struct 不同,更接近 C++ 的 class:有数据封装特性,可以包含成员函数、构造、析构函数、静态函数等,可以支持继承、模板等各种特性。唯一的区别是 class 的默认访问为 private,struct 为 public。
sharkhuang 2003-10-18
  • 打赏
  • 举报
回复
可以啊!你结构里面包含函数指针啊!!

在c++think 里面,不是一开始就将struct 和class的关系就说了吗?
qnwolf 2003-10-18
  • 打赏
  • 举报
回复
C中虽然不可以,但是可以有函数指针,如果在DOS下写程序,用C写一个菜单的话,那么在结构中用函数指针就非常方便的。
yonyon 2003-10-18
  • 打赏
  • 举报
回复
c中的struct可以,只不过函数(操作)默认public(没有c++的封装等特性)
c++中默认private


之所以出现这种情况,是因为c向c++的过渡经历的
你可以看看<<thingking in c++>>第二章
三色 2003-10-18
  • 打赏
  • 举报
回复
c中不形。
c++中行,事实上在c++中,struct已经被扩展了,可以拥有和class完全相同的作用。
fifo333 2003-10-17
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

int add(int a,int b)
{
return a+b;
}

int main()
{
int a=3,b=4,c;
int (*fp)(int,int);

fp=add;
c=fp(a,b);
printf("a=%d b=%d c=%d\n",a,b,c);

system("pause");
return 0;

}

函数名后不加调用操作符()就是函数的地址,可以赋给函数指针。
函数(及函数指针)的类型是由返回值、参数表决定的,赋值时函数指针类型必须和函数类型一致。
使用函数指针的方式和使用函数的方式一样。
buaaaladdin 2003-10-16
  • 打赏
  • 举报
回复
C++扩展了C中的struct使它具有类的特性,但又必须考虑到和以前的代码兼容,所以在访问控制上默认为public。

不过写C++的有谁会用struct去写class呢?
mjfsun 2003-10-16
  • 打赏
  • 举报
回复
那在c中,指向函数的指针怎么定义哪?
instigator 2003-10-16
  • 打赏
  • 举报
回复
C中可以使用,但是如果那样的话
为什么不用class呢?
都是public
数据的封装性怎么解决?
acqy 2003-10-16
  • 打赏
  • 举报
回复
在C++中你可以这样写:
struct MyStruct {
public:
// public declarations
private:
// private declarations
}
hbDeng 2003-10-16
  • 打赏
  • 举报
回复
to fifo333:表述准确无误。我就不多说了
fifo333 2003-10-15
  • 打赏
  • 举报
回复
C中不行,但可以使用指向函数的指针间接获得此能力。
C++中是可以的,其实C++中的结构和类是本质相同的,只不过类成员缺省为private,结构成员缺省为public,在有些情况下(如com中),因为大量定义public成员,就是用struct形式了。
zcpro 2003-10-15
  • 打赏
  • 举报
回复
c不行,c++可以,其实在c++里struct和class的区别就是struct的成员默认是public的,而class的成员默认是private的,除此之外一摸一样(ms定义的很多接口都是用的struct,例如IUnknown)

to Hot_Forever(用钱砸死我吧) :
struct成员的访问级别和class一样可以用关键字public,protected和private来修改。
killua1213 2003-10-15
  • 打赏
  • 举报
回复
c中的struct不能有函数,struct中必须是变量
bing_huo 2003-10-15
  • 打赏
  • 举报
回复
c肯定不行
sxdtwp 2003-10-15
  • 打赏
  • 举报
回复
c++行,c不行
Hot_Forever 2003-10-15
  • 打赏
  • 举报
回复
函数+数据不就是类的概念吗,原先的C语言肯定是没有的
不过现在一般编译器都是可同时编译C和C++源代码的
所以写到struct时候一般就认作C++中的struct了,可以带函数的,,所以在现在的编译器上你写的struct里面带函数是不会出错的,只不过struct里面的成员只有一个访问级别->public
helloair 2003-10-15
  • 打赏
  • 举报
回复
typedef struct TEST{
void hello(){
cout<<"hello";
}
}test;

C++中可以有,有必要吗?听楼下高见

加载更多回复(2)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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