Что означает имя-функции (const classname & objectname)? - PullRequest
2 голосов
/ 22 мая 2019

У меня есть задание, в котором мы должны выполнять расчеты резисторов (последовательно и параллельно), используя следующий класс:

class R1 {

protected:
   double R , cost_in_euro ;
      string unit ;
public :

   R1(double R , const string & unit , double cost_in_euro);
   R1(double R , double cost_in_euro);
   R1(double R);
   R1(const R1 & R);


   R1 serie(const R1 & R1);
   R1 parallel(const R1 & R1);



};

Мой вопрос касается функций серии и параллели. Как я должен добавить 2 резистора, используя функцию, которая принимает только один объект в качестве аргумента?

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

Вам нужен только один параметр, потому что класс содержит информацию для одного R, а параметр содержит информацию для другого R.

    class R1 {
        protected:
        double R , cost_in_euro ;
            string unit ;
        public :

        R1(double R , const string & unit , double cost_in_euro);
        R1(double R , double cost_in_euro);
        R1(double R);
        R1(const R1 & R);


        R1 serie(const R1 & other)
        {
            double total = other.R + R;
            return R1(total);
        }

        R1 parallel(const R1 & other)
        {
            double r1 = other.R;
            double r2 = R;
            double total = (r1*r2)/(r1 + r2);

            return R1(total);
        }

    };
0 голосов
/ 23 мая 2019

Как я должен добавить 2 резистора, используя функцию, которая принимает только один единственный объект в качестве аргумента?

Пример того, как 2 экземпляра вашего класса (a и b) могут работать вместе:

// using 'lists' require -std=c++17 or newer

#include <iostream>
using std::cout, std::endl;  // c++17

#include <iomanip>
using std::setw, std::setfill; // c++17

#include <string>
using std::string;

#include <sstream>
using std::stringstream;


class R1
{
protected:
   double m_R,  m_cost;
   string m_unit;

public :
   R1(double R , const string & unit , double cost_in_euro);
   R1(double R , double cost_in_euro);

   R1(double R)  // <<<<<<<<< dummy implmentation
      : m_R (R)
      , m_cost (9.9)
      , m_unit ("a unit")
      {
         cout << "\n  ctor R1(double) " << show() << endl;
      }

   R1(const R1 & R);

   R1 serie(const R1&  r2)  // <<<<<<<<<< with diag cout
      {
         cout << "\n  serie " << show() << "\n        "
              << r2.show() << endl;
         return (R1(r2.m_R + m_R));
      }

   R1 parallel(const R1& r2) // <<<<<<<<<< with diag cout
      {
         cout << "\n  parallel " << show() << "\n           "
              << r2.show() << endl;
         return ((r2.m_R * m_R) / (r2.m_R + m_R));
      }

   string show() const
      {
         stringstream ss;
         ss << "  [m_R: " << m_R << "  m_cost: " << m_cost
            << "  '" << m_unit << "']";
         return ss.str();
      }
};


class F805_t 
{
public:
   int operator()()
      {
         R1 a(2.0);

         R1 b(3.0);

         a.serie(b);     // <<<<<<<<< instance a using b

         b.parallel(a);  // <<<<<<<<< instance b using a

         return 0;
   }

}; // class F805_t


int main(int , char**) { return F805_t()(); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...