gpt4 book ai didi

c++ - 在类类型上重载函数

转载 作者:行者123 更新时间:2023-11-28 04:29:15 26 4
gpt4 key购买 nike

#include <iostream>
#include <iomanip>
#include <cmath>
#include "lineType.h"
using namespace std;

int main()
{
double x, y;
double a = 1.;
double b = 0.;
double c = 1.;
double d = 2.;
double e = 0.;
double f = 3.;
double g = 0.;
double h = 4.;
double i = -1.;

lineType line1(a, b, c);
lineType line2(d, e, f);
lineType line3(g, h, i);

cout << "Line 1: ";
line1.display();

if (line1.isParallel(line2)) cout << "line1 is parallel to line 2" << endl;
if (line1.isPerp(line3)) cout << "line 1 is perpendicular to line 3" << endl;

if (line2.intersect(line3, x, y))
cout << "The intersection of lines 2 and 3 is at point(" << x << ", " << y << ")" << endl;
else
cout << "Lines 2 and 3 do not intersect." << endl;

return 0;
}

这是我正在测试的代码,我得到的问题是 c2661 没有重载函数需要 3 个参数 我的头文件是: #pragma一次

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

class lineType
{
private:
double a;
double b;
double c;
public:
void display() const;
bool isParallel(const lineType& line) const;
bool isPerp(const lineType& line) const;
bool intersect(const lineType& line, double& x, double& y);
lineType();
lineType(double a2, double b2, double c2);
~lineType();
};

这是需要的lineType.cpp文件

#include "lineType.h"
#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

void lineType::display() const
{
cout << a << "x + " << b << "y = " << c << endl;
}

bool lineType::isParallel(const lineType& line) const
{
if (a == 0 && line.a == 0)
return 1;
if (b == 0 && line.b == 0)
return 1;
else if (-a / b == -line.a / line.b)
return 1;
else
return 0;
}

bool lineType::isPerp(const lineType& line) const
{
if (a == 0 && line.b == 0)
return 1;
if (b == 0 && line.a == 0)
return 1;
else if (-a / b == line.b / line.a)
return 1;
else
return 0;
}

bool lineType::intersect(const lineType& line, double& x, double& y)
{
if (a == 0)
x = c / b;
if (line.a == 0)
x = line.c / line.b;
if (b == 0)
y = c / a;
if (line.b == 0)
{
y = line.c / line.a;
}
else
{
x = ((a*line.c) - (c*line.a)) / ((b*line.a) - (a*line.b));
y = ((c*line.b) - (b*line.c)) / ((b*line.a) - (a*line.b));
}
if (a == 0 && line.a == 0)
return 0;
if (b == 0 && line.b == 0)
return 0;
return 1;
}

lineType::lineType()
{
a = 0;
b = 0;
c = 0;
}

lineType::lineType(double a2, double b2, double c2)
{
a = a2;
b = b2;
c = c2;
}


lineType::~lineType()
{
}

出现的错误信息错误(事件)E0289 构造函数“lineType::lineType”的实例与参数列表 Project1 第 20 行不匹配source.cpp 文件中第 21 行和第 22 行的错误消息相同。所以我不确定发生了什么?

最佳答案

lineType::lineType 是构造函数,是隐式生成的,因为您没有提供任何用户定义的构造函数。默认生成的构造函数不带参数,但您尝试在行中提供三个参数:

lineType line1(a, b, c);
lineType line2(d, e, f);
lineType line3(g, h, i);

我怀疑你想利用 aggregate initialisation ,不幸的是你不能使用它,因为你的 abc 变量是 private。您可能想自己添加这样的构造函数:

lineType(const double a, const double b, const double c)
:a(a), b(b), c(c) { }

但这还不是全部。您的代码还有更多问题。特别是:

if (line1.isParallel(line2)) cout << "line1 is parallel to line 2" << endl;

包含错字。它应该是 isParallel,如您在类中声明的那样(这也是一个拼写错误)而不是 isParallel。修复其中任何一个。

最后一行:

if (line2.intersect(line3, x, y))

不会编译,因为 intersect() 返回 void,而不是 boolif 语句要求为它们提供 bool 或可隐式转换为 bool 类型的内容。使您的函数返回 bool,这是名称以 is 开头的函数的逻辑假设。

关于c++ - 在类类型上重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53365862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com