【问题标题】:Issue with Defining a friend operator定义朋友运算符的问题
【发布时间】:2013-11-19 16:36:24
【问题描述】:

我处理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;
}

【问题讨论】:

  • 我更新了标题,以便对未来的访问者更有用。

标签: c++ operator-overloading friend


【解决方案1】:

你需要这样的东西:

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 引用。这将允许您绑定到临时值:

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

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

【讨论】:

  • Val 无法使用,因为它是私有的。
  • @user2977562 操作员是friend
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 2014-10-07
  • 1970-01-01
相关资源
最近更新 更多