Как передать значение из конструктора класса C ++ в качестве стандартного аргумента метода этого класса? - PullRequest
0 голосов
/ 26 июня 2019

Я хочу построить какую-нибудь программу на C ++, но я совсем новичок в ООП и столкнулся с проблемой, с которой Google не может помочь мне сейчас. Я думаю, что C ++ находится в версии 14, но я все еще не уверен, как проверить это в VS2017. Я хочу использовать значения, передаваемые конструктору класса, в качестве значений по умолчанию для другого метода того же класса.

Специально для моей задачи я создаю простую кейс-программу для добавления двух int, которая находится в трех отдельных файлах и выглядит так:

main.cpp

#include <iostream>
#include "add_this.h"
using namespace std;
int main(int argc, char** argv)
{
   Add plus(1, 2);
   cout << plus.AddingResult(IF EMPTY, TAKE VALS 1 AND 2 FROM ABOVE plus) << endl;
   return 0;
}

add_this.cpp

#include "add_this.h"
Add::Add(int a, int b)
{
}
Add::~Add()
{
}
int Add::AddingResult(int a, int b)
{
    return a + b;
}

add_this.h

#pragma once
class Add
{
    private:
        int a;
        int b;
    public:
        Add(int a, int b);
        ~Add();
        int AddingResult(int a, int b);
};

Хорошо, если в main.cpp я передаю значения вручную в примере plus.AddingResult(2, 3), я получу 5. Моя проблема в том, что я хочу получить метод, который будет принимать значения b или a и b (или в супер-версии метода будет b вручную и передано a от конструктора). Я пробую много подходов, связанных с указателями или определением методов Set и Get, но все они терпят неудачу в моей реализации - я не говорю, что они ошибочны, я говорю, что мои реализации были неверны. Я не буду прикреплять их для ясности вопроса.

1 Ответ

2 голосов
/ 26 июня 2019

Во-первых, давайте дадим вашим идентификаторам лучшие имена:

class Adder
{
    int lhs_;
    int rhs_;
public:
    Adder(int lhs, int rhs);
    ~Adder();

Затем мы определяем набор перегрузки для функции-члена add, поскольку мы не можем определить аргументы с нестатической переменной-членом в качестве значения по умолчанию:

    int add(int lhs, int rhs);
    int add(int lhs);
    int add();
};

Затем нам нужно «сохранить» значения, данные конструктору Adder:

Adder::Adder(int lhs, int rhs)
: lhs_(lhs), rhs_(rhs) // 1
{}

Строка, помеченная // 1, является синтаксисом для member-initializer-list ; он инициализирует переменные-члены lhs_ и rhs_ значениями аргумента. Последний шаг, мы используем эти переменные в нашем наборе перегрузки:

int Adder::add(int lhs, int rhs)
{
    return lhs + rhs;
}
int Adder::add(int lhs)
{
    return add(lhs, rhs_);
}
int Adder::add()
{
    return add(lhs_, rhs_);
}

Полная демонстрация: https://coliru.stacked -crooked.com / a / e08b8860c20d53c9

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...