gpt4 book ai didi

c++ - 定义友元运算符的问题

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:07 24 4
gpt4 key购买 nike

我的处理 friend > 运算符的代码有问题,但我似乎无法修复它。
我添加了 friend bool operator > (const my_int& c1, const my_int& c2); 代码,我知道它是正确的,但是在我试图实现它的主类中有点错误,不要不知道如何修复。

#include <iostream>
#include <cmath>
using namespace std;
//*********************************************************
// Function: my_int
// Purpose: Constructor initializes the val to x
// Params: x - the value for the val
// Calls: none
// Uses: none
//*********************************************************
//my_int::my_int(int x);
//*********************************************************
// Function: my_int
// Purpose: Constructor initializes the val to 0
// Params: none
// Calls: none
// Uses: none
//*********************************************************
//my_int::my_int();
//*********************************************************
// Function: my_int
// Purpose: Constructor initializes the val to x
// Params: x - the value for the val
// Calls: none
// Uses: none
//*********************************************************
//my_int::my_int();
//*********************************************************
// Function: set
// Purpose: Sets the val to x
// Params: x - the new value for the val
// Calls: none
// Uses: none
//*********************************************************
// void my_int::set(int x);
//*********************************************************************
// Function: input
// Purpose: reads and stores a value from inp. if fin is a input
// stream, then fin is already connected to a file.User enters
// a value and ask the user to re-enter the data if the
// user enters an incorrect value.
// Params: inp -- the input stream
// Calls: none
// Uses: istream
//*********************************************************************
//void my_int:: input(istream& inp);
//*********************************************************************
// Function: output
// Purpose: display the val on fout. if fout is a output stream
// then fout is already connected to a file
// Params: fout -- the output stream
// Calls: none
// Uses: ostream
//*********************************************************************
//void my_int::output(ostream& fout);
//*********************************************************
// Function: get_int
// Purpose: returns the val
// Params: none
// Calls: none
// Uses: none
//**********************************************************
// int my_int::get_int()
//*********************************************************
// Function: is_prime
// Purpose: object num contains a valid positive value
// returns true if num is prime; otherwise
// returns false
// Params: num - the value to be checked for prime
// Calls: sqrt
// Uses: cmath
//*********************************************************
// bool is_prime(const my_int& num);

class my_int
{
public:
my_int(int x);
my_int();

void set(int x);

void input(istream& inp);

void output(ostream& fout) const;

int get_int() const;

friend bool operator >(const my_int& c1, const my_int& c2);

private:
int val;
};

bool is_prime(const my_int& num);

int main()
{
my_int value1;

value1.input(cin);

value1.output(cout);

if (is_prime(value1))
cout << " is a prime number \n";
else
cout << " is not a prime number \n";

return 0;
}

my_int::my_int(int x)
{
val = x;
}

my_int::my_int()
{
val = 0;
}

void my_int::set(int a)
{
val = a;
}

void my_int::output(ostream& fout) const
{
fout << " The value is equal to " << val << endl;
}

int my_int::get_int() const
{
return val;
}

bool operator >(my_int& c1, my_int& c2)
{
if (c1.val > c2.val)
return (true);
else
return (false);

}

void my_int::input(istream& inp)
{
cout << "Enter a positive value greater than 1 ";
inp >> val;
while (val <= 1)
{
cout << "Entered an Invalid value \n";
cout << "Enter a positive value greater than 1 \n";
inp >> val;
}
}

//num has been given a value and returns true if the value is a
//prime number and false otherwise

bool is_prime(const my_int& num)
{
double limit;
int n; //divisor
bool prime= true;

limit = sqrt(static_cast<double>(num.get_int()));

n = 2;

while (n <= limit && prime)
{
if (num.get_int() % n == 0)
prime = false;
else
n++;
}
return prime;
}

最佳答案

你需要这样的东西:

bool operator > (my_int& c1, my_int& c2)
{
return c1.val > c2.val;
}

然后数据成员的名字是val,他们的类型是int。在 C++ 中调用 c1.int 没有意义。和图案

if (x)
return true;
else
return false;

又长又单调。您可以return x;

除此之外,您应该考虑传递 const 引用。这将允许您绑定(bind)到临时值:

bool operator > (const my_int& c1, const my_int& c2) { ... }

您需要同时修改声明和定义。

关于c++ - 定义友元运算符的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20077003/

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