有没有c++大佬来帮忙把这个程序的struct改为class类啊,这个程序大多是c的,老师要用c+
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有c++大佬来帮忙把这个程序的struct改为class类啊,这个程序大多是c的,老师要用c+相关的知识,希望对你有一定的参考价值。
struct和class很接近,大部分情况下可以通用。区别就是struct默认是public,class默认是private追问
老师还要求用c++中那些代表性的东西,比如封装,继承什么的
追答struct和class继承形式差不多,struct对象可以调用其结构体内任何成员,class调用的时候要区分private和protect
参考技术A 你把struct改成class基本就可以了追问还要用c++中那些代表性的东西,比如封装,继承什么的
追答你的代码在哪
C++ - 有没有办法重载指定的初始化程序?
【中文标题】C++ - 有没有办法重载指定的初始化程序?【英文标题】:C++ - Is there a way to overload designated initializers? 【发布时间】:2017-02-22 00:59:06 【问题描述】:假设有一个struct
类型将用于保存一个点在 3D 空间中的坐标。
这可以定义为:
struct Point double x, y, z; ;
使用double
值,因为我们希望尽可能精确。
这个struct
的一个实例,可以使用指定的复合文字来声明,例如:
double x = 0.0;
double y = 0.0;
double z = 0.0;
...
Point p = (struct Point) .x=x, .y=y, .z=z ;
但是,当尝试从不同类型开始声明另一个 Point 时:
int x = 0;
int y = 0;
int z = 0;
...
Point p = (struct Point) .x=x, .y=y, .z=z ;
编译器抛出错误,因为它找不到合适的构造函数。如果有人这样做,这将有效:
Point p = (struct Point) .x=(double)x, .y=(double)y, .z=(double)z ;
有没有办法重载 Point 构造函数,这样就不必手动将初始化列表的每个成员都转换为双精度?
也许在struct
的声明中使用Point(initializer_list<int> ...)
之类的东西?
【问题讨论】:
我认为 .x=x, .y=y, .z=z
语法来自C,而不是C++,不是吗?
是的,但是构造函数/重载属于C++,除非我已经过时了。
听起来不错。愿意分享如何?
@almosnow 看起来 C++11 根本不支持指定的初始值设定项:请参阅 here 和 there,所以我怀疑是否有可能重载它们。无论如何,很乐意学习其他方式。
@almosnow:C 和 C++ 是不同的语言,没有一个是另一个的超集。即使相同的语法并不意味着相同的语义。这就是为什么这里没有很好地接受两者的双重标记的原因。明确一点:不要为 C++ 问题添加 C 标签,反之亦然!
【参考方案1】:
您无法重载指定的初始化列表,因为那是not a supported C++ feature,但是通过使用构造函数和 C++11 的统一初始化,您可以非常接近您想要的。如果我们有
struct Point
Point (double x, double y, double z) : x(x), y(y), z(z)
double x, y, z;
;
那么我们可以像这样使用它
int main()
double x = 0.0;
double y = 0.0;
double z = 0.0;
Point px, y, z;
Point i1, 2, 3;
【讨论】:
@almosnow:已经是voted in for C++20, apparently。相对于 C,有一些限制。以上是关于有没有c++大佬来帮忙把这个程序的struct改为class类啊,这个程序大多是c的,老师要用c+的主要内容,如果未能解决你的问题,请参考以下文章
有没有大佬帮忙看看这个问题是在那里?Android studio