如何从C ++类构造函数传递值作为此类方法的默认参数?

时间:2019-06-26 07:39:32

标签: c++ oop

我想用C ++构建一些程序,但是我在OOP中是个新手,我遇到了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或{{1} }和a值(或在超级方法版本中,将手工获取b并从构造函数传递b)。我尝试了很多与指针相关的方法或定义Set和Get方法的方法,但是在我的实现中都失败了-我并不是说它们是错误的,而是我的实现是错误的。为了清楚起见,我不会附加它们。

1 个答案:

答案 0 :(得分:2)

首先,让我们为您的标识符赋予更好的名称:

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

然后,我们为成员函数add定义一个overload set,因为我们无法定义以非静态成员变量作为默认值的参数:

    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