比较来自两个不同类的对象
Comparing objects from two different classes?
你好,我一直在试图找出这个问题。我在这个函数中传递了一个对象来比较两个不同的卷,但是我需要使用两个不同的类(继承)来接收卷的信息。当我尝试传递对象时,我很难尝试使用传递对象的circleType和圆柱体类型类。我不确定如何正确地解决这个问题,但我正在努力弄清楚如何在比较函数中使用两个不同的类。
bool equalVolume(const circleType&, const cylinderType& ct)
{
if (ct.CalcVolume != Calvolume())
{
return false;
}
else
{
return true;
}
}
您的实现存在多个问题。您收到两个形状,但是circleType
没有变体名称。然后我看到你试着不带变量调用函数calcVolume
。你如何计算无物的体积?嗯,你不能。你必须使用圆圈的名称并参考它。
// v---- Give a name to your circle
bool equalVolume(const CircleType& myCircle, const CylinderType& myCylinder) {
// v---- Call calcVolume with myCircle
if (myCircle.calcVolume() != myCylinder.calcVolume()) {
// call with the cylinder --^
return false
} else {
return true;
}
}
顺便说一下,由于比较已经是bool
类型的表达式,您可以将函数缩小为:
bool equalVolume(const CircleType& myCircle, const CylinderType& myCylinder) {
return myCircle.calcVolume() == myCylinder.calcVolume();
}
我宁愿创建一个返回音量的函数,而把实现留给用户。它看起来像这样:
using volume_t = double;
struct Circle {
volume_t volume() const {
// return volume here
}
};
struct Cylinder {
volume_t volume() const {
// return volume here
}
};
然后,不使用isVolumeEqual
函数,只需这样做:
if (myCircle.volume() == myCylinder.volume()) {
// code here ...
}
如果你真的想实现音量相等的功能,我会这样做:
template<typename S1, typename S2>
auto volumeEqual(const S1& s1, const S2& s2) -> decltype(s1.volume() == s2.volume()) {
return s1.volume() == s2.volume();
}
这样,您就可以为所有可能具有volume()
函数的形状实现volumeEqual
。
我想它可能看起来像这样:
bool equalVolume(const circleType& cir, const cylinderType& cyl)
{
return cir.CalcVolume == cyl.CalcVolume;
}
正如另一个用户指出的,我可能会添加一个volume() getter函数,并使用它来代替直接访问CalcVolume(它可能是一个数据成员)。
PS:写这样一个比较卷的函数看起来是多余的,因为你总是可以在if()条件中比较卷。
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 如何设置一个 std::vector 与另一个,其中两个是不同类的向量?
- 从两个不同类继承的非虚拟基类的访问成员
- 使用转换运算符相互转换两个不同类的对象
- 两个不同类的运行时多态性
- 如何比较两个不同类的对象
- 具有两个不同类的两个不同构造函数
- 如何在具有相同基类的两个不同类中获取向量
- 两个不同类的泛型函数
- 检查来自不同类的两个Rect之间的冲突
- c++中包含两个不同类的对象的列表
- 比较来自两个不同类的对象
- c++ Boost信号连接模板中两个不同类的两个函数
- 等同c++中来自不同类的两个对象
- 重载指向两个不同类的指针的赋值运算符
- 如何锁定由属于两个不同类的两个线程修改的数据结构