没想到吧,结构体里面也能放函数;之前自己都没使用过,所以第一次用的时候还有点不知所措。
如下代码所示,在.h文件里面定义一个结构体,在里面直接添加函数就可以。不知道有没有小伙伴和我一样会疑惑结构体里面的函数可不可以在外面实现,就像类里的成员函数可以在.cpp里实现(会这样想的原因是万一函数里面的代码很长时,这样岂不是很不美观);
答案是否,只能在结构体里面实现,一般来说,结构体里的函数也不会写得很长。
struct SRT_TASK_DATA
{
QString sTaskId; // 任意性 时间精确到秒 _ 3个字符
QString sFromIp; // 通过Qt 接口获取
QString sContent; // 先保存当前接收的 xml 数据
QString sType; //TCP UDP
bool isVald()
{
if(sContent.isEmpty() || sTaskId.isEmpty() || sTaskId.isEmpty() || sType.isEmpty())
{
return false;
}
return true;
}
void clear()
{
sTaskId.clear();
sFromIp.clear();
sContent.clear();
}
};
函数调用使用示例(和调用结构体里的成员没啥区别):
SRT_TASK_DATA srtData;
srtData.clear();
srtData.sTaskId = sTaskId;
srtData.sFromIp = sFromIp;
srtData.sContent = sContentXml;
srtData.sType = sType;
if(srtData.isVald())
{
m_stdTaskList.append(srtData);
qDebug() <<"结构体大小"<<sizeof(SRT_TASK_DATA);
return true;
}
return false;
2022/3/30——再次看到上面的问题,感觉就是自己无知造成的疑惑,唉!
C和C++结构体区别
- C的结构体内不允许有函数存在,C++允许有内部成员函数(就是上面提到的结构体里面允许有函数),且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。
- C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。
- C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。
- 在C中定义一个结构体型要用到typedef,如下:
typedef
struct
Complex{
int
read;
int
image;
}Complex;
那么,在说明Complex变量的时候可以这样写
Complex complex;
但是如果没有typedef就必须用
struct
Complex complex;
来声明。
但在c++里很简单,直接
struct
Complex{
int
read;
int
image;
};
于是就定义了结构体类型Complex,声明变量时直接Complex complex,不用加struct;