关于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";
}



没有报错,输出正常,求人解释那就话到底是什么意思呢?
...全文
539 8 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
那句话有问题
内容概要:本文提出了一种基于改进扩散模型的高海拔地区新能源高波动出力场景生成方法,并提供了完整的Python代码实现。该方法针对高海拔地区风能、光伏等新能源出力波动剧烈、不确定性高的特点,通过优化扩散模型的结构与训练策略,有效捕捉历史数据的概率分布特征与时序相关性,从而生成高质量、多样化的出力场景。文中详细阐述了模型的数学推导、网络架构设计、损失函数优化及采样算法改进,并通过实验证明其在拟合精度、场景多样性与稳定性方面优于传统生成模型,为电力系统在高比例新能源接入下的规划、调度与风险评估提供了可靠的场景输入支持。; 适合人群:具备一定Python编程能力和机器学习基础,从事新能源发电预测、电力系统分析、智能优化、场景生成等方向研究的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①用于高海拔地区风电、光伏出力的不确定性建模与多场景生成;②支撑含高渗透率新能源的电力系统随机优化调度、鲁棒决策与风险评估;③为相关学术研究、论文复现与算法改进提供可运行的技术方案与代码基础; 阅读建议:建议读者结合所提供的完整资源(代码、数据集、说明文档)进行实践操作,重点关注扩散模型的前向加噪与反向去噪过程的设计细节,以及如何将其适配于新能源时序数据的生成任务,通过参数调优与对比实验深入理解模型的生成机制与性能边界。
内容概要:本文围绕基于静态约束法的配电网电动汽车接入容量评估展开研究,提出了一种在新型电力系统背景下评估主动配电网对电动汽车承载能力的方法。研究通过构建数学模型,结合潮流计算与关键约束条件(如电压越限、线路过载等),量化分析配电网可承受的最大电动汽车充电负荷容量,旨在识别规模化电动汽车接入带来的潜在运行风险,并为电网规划与运行提供科学依据。文中配套提供了完整的Matlab代码实现,便于仿真验证与结果复现。此外,该研究与分布式光伏承载力评估、电动汽车可调能力分析等方向形成技术联动,展现了多主题协同的研究体系。; 适合人群:具备电力系统分析基础理论知识及Matlab编程能力的高校研究生、科研机构研究人员,以及从事新能源并网、智能配电网规划与运行等相关领域的工程技术人员。; 使用场景及目标:①用于学术研究中的模型复现与论文撰写支撑;②评估实际配电网中电动汽车大规模接入的可行性与安全边界,指导充电基础设施布局;③作为高校教学案例,帮助学生深入理解电网承载力评估的核心原理、建模方法与仿真技术; 阅读建议:建议结合文中提及的相关研究方向(如二阶锥规划、多面体聚合方法等)进行对比学习,充分利用所提供的Matlab代码与网盘资料开展仿真实验,重点关注约束条件的设定逻辑与潮流计算模块的实现细节,以深化对评估模型机理与工程应用价值的理解。

65,210

社区成员

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

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