关于C++结构体的构造函数

Sidfate 2014-04-08 07:31:51
在网上看到这句话:结构不能包含显式的无参数构造函数。结构成员将自动初始化为它们的默认值。

不太明白,就用实例试了下:
#include <iostream>  
struct point
{
public:
point()
{
std::cout<<"default constructor\n";
}
point(double x,double y):x_(x),y_(y)
{
std::cout<<"constructor("<<x<<", "<<y<<")\n";
}
~point()
{
std::cout<<"default destructor\n";
}

double get_x()
{
return x_;
}

double get_y()
{
return y_;
}

private:
double x_;
double y_;
};
int main()
{
point pt;
std::cout<<pt.get_x()<<"\n";
std::cout<<pt.get_y()<<"\n";
}



没有报错,输出正常,求人解释那就话到底是什么意思呢?
...全文
457 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
心灵捕手3 2014-04-16
  • 打赏
  • 举报
回复
以后在C++中尽量不用Struct,用class。在C中再用struct。虽然C/C++代码可以混合编译,但是最好不要这么做。
lm_whales 2014-04-16
  • 打赏
  • 举报
回复
引用 7 楼 unituniverse2 的回复:
现在还用struct和class的,是因为可读性的问题,而对于编译器来说访问权是唯一的不同。 用struct表示使用此类型的用户应该关注其数据成员内容,有时候用struct向用户表示其中的某些符号定义的重要性。总之都是向用户表示应该关注其中的内容。 用class表示使用此类型的用户应该尽可能把此类型当作一个黑盒,里面的数据成员细节等不是用户应该花主要精力的地方,而相比其他事情,这个类型的接口函数和用法更重要。 注意上面这些不是C++标准的内容,而是设计上的一般考虑 struct强调内容之重,所以其接口函数不提倡使用虚函数。C++标准规定成允许结构体也可以有虚函数是出于对结构体可能从多态类继承或者自身包含了多态类对象做为数据成员的考虑。
++ 有道理,C++标准不是死的,他也要考虑各种情况,也是不断改进的。 这个说法,非常合乎情理。 举个例子,对于位域,如果使用class 定义,估计大家都会感到非常别扭,位域这种数据,从C开始,就是用的 struct 关键字,C++并没有抛弃位域这种概念。 另外一个非常重要的事实是,任何 C++编译器,都可以编译C代码; C++标准库里,有一个C标准库,和一个C++标准模板库。 C++标准库,也没有抛弃C。 实际上,任何一个C++编译器的实现,往往也会实现1个C编译器,一个汇编器。 因此,C++完全没有必要,彻底抛弃C C和C++联合编程,有时还和汇编联合编程,实际上也是非常重要的; 不要忘记,操作系统,往往只提供C API 作为接口。 因此,C++一定程度的兼容C,是很必要的。 C API中,也有一些 struct,如果改成class 既浪费人工,也很没有必要。 C++编译器,能够编译C代码,应该是写在标准里的吧,哪位比较清楚标准,查查有没有这一条。
unituniverse2 2014-04-16
  • 打赏
  • 举报
回复
现在还用struct和class的,是因为可读性的问题,而对于编译器来说访问权是唯一的不同。 用struct表示使用此类型的用户应该关注其数据成员内容,有时候用struct向用户表示其中的某些符号定义的重要性。总之都是向用户表示应该关注其中的内容。 用class表示使用此类型的用户应该尽可能把此类型当作一个黑盒,里面的数据成员细节等不是用户应该花主要精力的地方,而相比其他事情,这个类型的接口函数和用法更重要。 注意上面这些不是C++标准的内容,而是设计上的一般考虑 struct强调内容之重,所以其接口函数不提倡使用虚函数。C++标准规定成允许结构体也可以有虚函数是出于对结构体可能从多态类继承或者自身包含了多态类对象做为数据成员的考虑。
sen_lin8350 2014-04-16
  • 打赏
  • 举报
回复
在c和c++中struct和class无差别,只是默认的访问权限不一样。
「已注销」 2014-04-16
  • 打赏
  • 举报
回复
struct 与class本质上应该是相同的,只是默认的访问权限不同(struct默认是public,class默认是private ).之所以要保留struct,很大一部分原因是为了与C兼容吧(C++的一篇文章中是这么说的,我感觉还是有一定的道理). class感觉是应该是struct的扩充,除了可以设置成员的访问类型外,还可以有自己的成员函数,可以继承派生等,好象struct能做的class 都能做,但反过来就不行了,如果没有保护数据的要求,struct能做的我都用struct做,比较简单。
max_min_ 2014-04-08
  • 打赏
  • 举报
回复
c++语言来说,class和struct这方面没有区别,没听过这个概念哦,
Morrisss_ 2014-04-08
  • 打赏
  • 举报
回复
搞混了一些东西了,看它说struct是值类型就知道,搞C#搞多了。。struct和class除了权限有所不同外,差不多都一样,既然class可以有无参的构造,为什么struct不可以呢?
碼上道 2014-04-08
  • 打赏
  • 举报
回复
那句话有问题

65,186

社区成员

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

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