C++中结构体的默认值

yangyunzhao 2009-10-14 03:13:06
C++的结构体有没有默认值?有没有默认构造函数,有没有默认拷贝构造函数
比如像下面的SysMaskPara()和SysMaskPara& operator = (const SysMaskPara &that)
有没有必要定义?
如果不是int而是别的类型,比如char char* string等等呢?
谢谢!!!

typedef struct SysMaskPara //系统子网掩码设置参数
{
int UpPortFirst;
int UpPortSecond;
int UpPortThird;
int UpPortFourth;

public:
SysMaskPara()
{
UpPortFirst = 0;
UpPortSecond = 0;
UpPortThird = 0;
UpPortFourth = 0;
}
SysMaskPara& operator = (const SysMaskPara &that)
{
this->UpPortFirst = that.UpPortFirst;
this->UpPortSecond = that.UpPortSecond;
this->UpPortThird = that.UpPortThird;
this->UpPortFourth = that.UpPortFourth;
}
}SysMaskPara;
...全文
2728 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2009-10-16
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 liangyu_fei 的回复:]
有个问题    结构体可以用类来实现。那么用类不是更安全吗?为什么还要用结构体?
[/Quote]
为了兼容呗。
至少从历史上看,如果当初不是由于对C的兼容,C++不可能发展这么快。
wxdcxp 2009-10-15
  • 打赏
  • 举报
回复
struct不是结构体是类啊
一般都是用默认构造函数来初始化的
cmkyec 2009-10-15
  • 打赏
  • 举报
回复
学习
yshuise 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 steedhorse 的回复:]
引用 6 楼 yshuise 的回复:
还有点区别:
template <class T>
struct Type{
typedef T type;
};
template <struct T>//没这种写法。。

偶前面说了,指的是“struct类型跟class类型的区别”,不是“struct关键字class关键字的区别”。:)
[/Quote]
这儿在模板中代表是指类型。template<typename C>//C为类型。
当然还有非类型
template<int N>...等等
liyw 2009-10-15
  • 打赏
  • 举报
回复
C++语言中对C语言中的struct进行了扩展,结构体类型struct跟class类型基本是一样的。只除两点:
(1)默认成员访问权限为struct为public,class为private;
(2)默认继承权限,继承自struct的默认为public继承,继承自class的默认为private继承。
因此,在truct中可以有class中的所有功能。同时,根据现代C++提倡的编程风格,访问权限一般都写清楚,而不用默认值。因此struct和class一样了。但是,最好用class
晨星 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yshuise 的回复:]
还有点区别:
template <class T>
struct Type{
typedef T type;
};
template <struct T>//没这种写法。。
[/Quote]
偶前面说了,指的是“struct类型跟class类型的区别”,不是“struct关键字class关键字的区别”。:)
kiwigiving 2009-10-15
  • 打赏
  • 举报
回复
有的,class和struct唯一的区别就是默认共有/私有的区别,
默认构造函数,复制控制函数struct都是有的。
aizibion 2009-10-15
  • 打赏
  • 举报
回复
有成员属性的类或结构,必须(我自己规定的)显示提供构造函数,并初始化成员属性

因为默认构造只负责构造对象,不负责初始化成员
flyerwing 2009-10-15
  • 打赏
  • 举报
回复
C++结构跟类只有成员公有/私有的区别
很少有用C的了吧,大部分都是C跟++的混合吧?
Julykey 2009-10-15
  • 打赏
  • 举报
回复
明明可以用类来表达,为什么还用结构体呢
sunm42000 2009-10-15
  • 打赏
  • 举报
回复
默认的构造函数是编译器给出的无用构造函数,观念上是存在的,你可以全当不存在,可以认为存在的意义仅仅是编译时合法
lihan6415151528 2009-10-15
  • 打赏
  • 举报
回复
struct应该有构造函数的
butwang 2009-10-15
  • 打赏
  • 举报
回复
未初始化的局部变量(栈里面)是随机的,

未初始化的全局变量有默认值,未初始化的全局变量对应exe里的bss段,exe加载时操作系统为bss段分配内存并都清为0

struct,class的=操作默认就是把一个对象对应的内存区域拷贝给另一个对象的内存区域,这并不调用任何构造函数,其实就是用汇编的move一个一个的赋值的
Eid 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 steedhorse 的回复:]
C++语言中,结构体类型跟class类型基本是一样的。只除两点:
(1)默认成员访问权限为struct为public,class为private;
(2)默认继承权限,继承自struct的默认为public继承,继承自class的默认为private继承。
除此之外,class是怎样的,struct就是怎样。

至于只有基本类型成员的POD类型来说,它确实有一些特别的地方,比如可以用大括号的语法来初始化。但这一点class也是一样的,并没有什么实质区别。比如你的:
struct SysMaskPara
{
    int UpPortFirst;   
    int UpPortSecond;   
    int UpPortThird;   
    int UpPortFourth;
};
如果改写成:
class SysMaskPara
{
public:
    int UpPortFirst;   
    int UpPortSecond;   
    int UpPortThird;   
    int UpPortFourth;
};
在C++语言中,效果上是一样的。只不过那样一来,C语言用不了了。
[/Quote]
有个问题 结构体可以用类来实现。那么用类不是更安全吗?为什么还要用结构体?
chengzhe 2009-10-15
  • 打赏
  • 举报
回复
有的 和类一样
dake53 2009-10-15
  • 打赏
  • 举报
回复
C++中结构体和类基本上是一样的
davidstack 2009-10-15
  • 打赏
  • 举报
回复
struct的“=”不需要重载,但当struct中含有指针型变量时,需要重载“=”操作符,因为若在有指针变量时,进行指针赋值时,是将地址拷贝,当你在一个结构体修改变量值时,同时也修改了另一个变量的值
herman~~ 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yshuise 的回复:]
还有点区别:
template <class T>
struct Type{
typedef T type;
};
template <struct T>//没这种写法。。
[/Quote]

恩 这也是区别之一 。不过在很都方面几乎都可以通用
xlttap 2009-10-15
  • 打赏
  • 举报
回复
有destructor和constructor,但是成员变量的默认权限和class不一样,其默认权限是public,默认值和class一样,也是不确定的。bool,string类型的默认值是true,""(空的,不是空格)。
晨星 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yshuise 的回复:]
引用 12 楼 steedhorse 的回复:
引用 6 楼 yshuise 的回复:
还有点区别:
template  <class T>
struct Type{
typedef T type;
};
template  <struct T>//没这种写法。。

偶前面说了,指的是“struct类型跟class类型的区别”,不是“struct关键字class关键字的区别”。:)

这儿在模板中代表是指类型。template <typename C>//C为类型。
当然还有非类型
template <int N>...等等
[/Quote]
可能我没表达清吧,呵呵。
还是不做这个文字游戏了。
没错,class和struct作为两个关键字,确实还存在着这种很明显的区别,您补充得很对。
我前面也是故意不想提class关键字还可以用作模板参数声明这档子事,怕话题扯开得太远,所以特意加上了“类型”两字,看来还是没找到更严格地表达方式。
加载更多回复(6)

64,637

社区成员

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

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