【问题标题】:I need to call a c++ function within a function using the same object?我需要在使用同一个对象的函数中调用 c++ 函数吗?
【发布时间】:2012-06-28 06:07:04
【问题描述】:

例子:

class Person
{
private:
     int age;
public:
     int getAge()
     {
         return age;
     }
};
class Employee: public Person
{
private:
    int empNum;
};

现在说我想重载 + 运算符来添加两个员工对象的年龄。其中一个员工对象调用重载的运算符函数,但在本例中,我还需要该对象从基类调用 getAge() 函数。我知道我可以只设置年龄保护而不是私有,但是有没有办法做到这一点,让该财产保持私有?

【问题讨论】:

  • getAge() 已经公开,所以没有问题。
  • int operator+(Person& a, Person& b) { return a.getAge() + b.getAge(); } 有什么问题?
  • @PhilipKendall 我不推荐这样的重载。人+人等于一个人的年龄之和真的很“明显”吗?为什么这样?为什么不使用重量或其他任何东西:-) 应该非常明智地使用运算符重载。 a.getAge() + b.getAge()sumAge(a,b) .. 我会坚持其中之一。
  • @elmes 在某种程度上,我同意你的看法,但这主要是风格问题,原始发帖人确实明确要求重载 operator+ 以增加年龄。
  • 我使用了人们的年龄,因为我认为这比我实际做的更容易看。这是为了简化。

标签: c++ class inheritance operator-overloading data-hiding


【解决方案1】:

你应该可以这样写你的操作符:

int operator+(const Employee& arg1, const Employee& arg2) {

  int result = arg1.getAge() + arg2.getAge();
  return result;

}

【讨论】:

  • +1 - 尽管我认为运营商应该采用 Person 对象而不是 Employees,即使这不是原始发帖人所要求的。
  • 你不必使用类来重载运算符吗?我的印象是必须在课堂上完成。
  • @Jerold Davis:不,你可以在课外做。一个典型的例子是为输出流提供对象的文本表示:parashift.com/c++-faq-lite/input-output.html#faq-15.8
【解决方案2】:

您可以为 Person 重载加号运算符。或者,getAge() 可以从重载的运算符中调用,因为它是公共的。

【讨论】:

    【解决方案3】:

    简单地说:不。

    您总是需要方法(或变量)被保护或公开,以便您从子类中调用它。 (或者您可以定义另一个“getter”方法来访问它,但现在它必须是受保护的或公开的。)

    【讨论】:

      【解决方案4】:

      如果您想将该属性设为私有,可以使用友元运算符重载函数。

      【讨论】:

      • 所以,因为是友元函数,所以没有this指针,也就是说它不是被对象调用的,我只是把我要操作的两个对象传给函数,对吧?跨度>
      猜你喜欢
      • 2022-01-20
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2011-01-16
      相关资源
      最近更新 更多