如何解决C ++如何将值从一种结构传递到另一种?
| 我有两种不同的结构。第一个是astm,它从.txt文件中读取数据;第二个是rebar,使用结构一中的值读取用户输入并进行计算。 Sturct astm将充当菜单。我的问题是,如何将值从astm传递到struct rebar? 这是两个结构:typedef struct
{
int size;
double weight;
double diameter;
} astm;
typedef struct
{
int size;// user input from astm.size
double length; // user input
} rebar;
这是.txt文件(实际文件不包含\“ sz \”,\“ wt \”或\“ diameter \”):
sz wt diameter
2 0.167 0.250
3 0.376 0.375
4 0.668 0.500
5 1.043 0.625
6 1.502 0.750
7 2.044 0.875
8 2.670 1.000
9 3.400 1.128
10 4.303 1.27
11 5.313 1.41
14 7.65 1.693
18 13.6 2.257
例:
选择尺码:4
乙醚长度:500
大小:4
直径:0.500
总重量=长度*重量= 3340.0
解决方法
要回答您的问题:
astm myAstm;
myAstm.size = 5;
myAstm.weight = 30.0;
myAstm.diameter = 10;
rebar myRebar;
myRebar.size = myAstm.size;
myRebar.length = someCalculation(...)
但是,更好的方法是将一个嵌入到另一个中:
typedef struct
{
int size;
double weight;
double diameter;
} astm;
typedef struct
{
astm *myAstm;
double length; // user input
} rebar;
以这种方式进行操作将导致较少的冗余数据散布,并且将使您能够传递仅代表所有内容的一种结构。
astm myAstm;
myAstm.size = 5;
myAstm.weight = 30.0;
myAstm.diameter = 10;
rebar myRebar;
myRebar.myAstm = &myAstm;
myRebar.length = someCalculation(...)
// To get at the size attribute:
printf(\"size is %d\\n\",myRebar.myAstm->size);
, 您可以重载赋值运算符。
但是请注意,操作员重载并不总是最好的方法。
也许,转换函数或成员函数是更好的选择。
, 重载赋值运算符是一种可能的途径,但并不是很多人都不喜欢这样做。您也可以将它们直接传递给成员变量。
objRebar.size = objastm.size;
或者,您可以将它们放入类并添加一个成员函数来为您处理。是否有必要使用结构?
, 理想情况下,您希望有一张根据尺寸查找重量/直径的地图。
由于您使用的是C ++,因此请看ѭ6(http://www.cplusplus.com/reference/stl/map/)。
更改“ 7”以仅保留“ 8”,并在读取每个“ 9”的txt文件时执行“ 10”
计算时,只需从map
中查找astm
并评估其总重量即可。
, 我可以通过创建一个函数来解决这个问题:
void MoveInfo(const Astm &t,ReBar &bar);
但是要做到这一点,您将需要正确提供结构名称:
struct Astm { ... };
struct ReBar { ... };
注意结构名称的位置。
, 如果rebar直接使用astm(并且您实际上是在使用C ++),则将出现以下内容:
struct astm
{
astm( int size,float weight,float diameter )
: size( size ),weight( weight ),diameter( diameter )
{}
int size;
double weight;
double diameter;
};
struct rebar
{
rebar( int size,double length )
: size( size ),length( length )
{}
rebar( const astm& astm ) //<<< Uses astm directly
: size( astm.size )
{
// Do something with rest of astm
}
};
但是,事实并非如此。听起来您想要这样的东西:
std::vector<rebar> rebarVec;
for ( int i = 0; i < numThings; ++i )
{
// Compute stuff from astm[ i ]
rebar rebarItem( size,length );
rebarVec.push_back( rebarItem );
}
这是您要达到的目标吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。