显示两个类之间转换的输出数据
Display Output Data for conversion between 2 Classes
我实现了从英尺到米的转换,如下所述,但我无法在main中打印出结果。以下是中产生错误的代码
Ftr cnum1(2);
Mtr cnum2 = cnum1.toMtr();
std::cout << cnum1.getNum() <<" feet = " << cnum2.getMtrNum() << " meters nn";
我无法将getNum方法与cnum2一起使用,因为getNum不是Mtr中的方法。但是,结果可以准确地显示在Ftr.cpp文件中
#include "Ftr.h"
#include <iostream>
#include <string>
namespace fun::calc
{
Ftr::~Ftr() { }
Ftr::Ftr(double Ftr) noexcept { }
double Ftr::getNum() const noexcept { return m_Num;}
Mtr Ftr::toMtr() const noexcept { return Mtr(m_Num * fInMtr); }
Ftr头文件包含以下内容:
#ifndef __FTR_H
#define __FTR_H
#include <cstdint>
#include “Mtr.h”
namespace fun::calc
{
class Mtr;
class Ftr
{
double m_Num;
static constexpr double fInMtr = 0.3048;
public:
Ftr() = delete;
explicit Ftr(double Ftr) noexcept;
~Ftr() noexcept;
Ftr(const Ftr &other) = default;
Ftr(Ftr &&other) = default;
double getNum() const noexcept;
Ftr operator+(const Ftr &rhs) const;
Mtr toMtr() const noexcept;
};
}
#endif;
我尝试在Mtr.cpp中创建一个getMtrNum函数,如下所示:
double Meters:: getMtrNum () const noexcept { return m_mtr;}
我修改了main((以使用getMtrNum,如下所示
Ftr cnum1(2);
Mtr cnum2 = cnum1.toMtr();
std::cout << cnum1.getNum() <<" feet = " << cnum2.getMtrNum() << " meters nn";
结果现在显示0.0,因为在mtr.h文件中n_mtr已初始化为0.0产生的输出为:2英尺=0米关于如何实现这一点以在函数定义之外显示正确的结果,有什么建议吗?理想情况下,我希望在不必创建getMtrNum的情况下生成正确的结果。请提供一些关于如何正确获取两个不同类别之间的数据流并正确显示结果的指导。
如果我理解正确,你想做两点:
- 修复代码,使其显示转换值
- 在不创建getMtrNum((的情况下进行打印
第二点是,如果您想让您的成员保持私有,那么在任何情况下都需要创建一个getter/printer函数。如果你创造了一个"ostream",可能会更优雅一点<lt"操作员过载。这样,您就不需要在打印Meters时使用getter函数。
编辑:更准确地说,仍然使用getter。一旦操作员过载
std::ostream& operator<<(std::ostream& out, const Meters& m)
{
out << m.Get();
return out;
}
// in main
// std::cout << cnum1.Get() <<" feet = " << cnum2 << " meters nn";
一个完整的工作示例:
#include <iostream>
class Meters {
public:
Meters(const Meters& m)
:m_Meters(m.m_Meters)
{
}
Meters(double m)
:m_Meters(m)
{
}
double Get() const { return m_Meters; }
private:
double m_Meters{};
};
std::ostream& operator<<(std::ostream& out, const Meters& m)
{
out << m.Get();
return out;
}
class Feet{
public:
Feet(double f)
: m_Feet(f)
{}
static constexpr double fInMtr = 0.3048;
Feet() = default;
Meters ToMeters() const { return Meters(m_Feet * fInMtr); }
double Get() const { return m_Feet; }
private:
double m_Feet{};
};
int main()
{
Feet cnum1(2);
Meters cnum2 = cnum1.ToMeters();
std::cout << cnum1.Get() <<" feet = " << cnum2 << " meters nn";
}
我希望,这就是你想要的。
相关文章:
- 构造函数和转换运算符之间的重载解析
- C ++中无符号位长度类型之间的隐式转换,即uint8_t,uint16_t
- 模板转换运算符在 clang 6 和 clang 7 之间的区别
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- Cxx.jl 在 Julia Complex 和 std::complex 之间进行转换
- 如何在 std::string 和 Aws::String 之间进行转换?
- 转换字符时Arduino DUE 和 Arduino UNO 之间的区别
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 指向 POD 类型的指针之间的静态转换与重新解释转换
- 在 Rcpp 中的字符串类型之间转换时出错
- 如何声明不同类型的模板化类之间的转换
- C 和 C++ 中的函数指针转换之间的差异
- 与浮点转换之间的规范化整数
- 重新解释强制转换和 C 样式转换之间的 C++ 区别
- C++ get 和类型转换之间的用法有什么区别?我应该使用哪一个?
- printf函数参数之间的序列点;转换之间的顺序点是否重要
- Clang和GCC中不明确基类转换之间的行为差异
- 转换之间的双和字节数组,为传输ZigBee API
- 隐式转换和显式转换之间的区别
- interpret_cast和C样式强制转换之间的区别是什么