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

How to pass value from C++ class constructor as a default argment of method of this class?

本文关键字:类方法 默认 参数 C++ 构造函数      更新时间:2023-10-16

我想用C++构建一些程序,但我在OOP中很新手,我遇到了一个谷歌现在无法帮助我的问题。我认为C++在版本 14 中,但我仍然不确定如何在 VS2017 中检查这一点。我想使用传递给类构造函数的值作为同一类的另一个方法的默认值。

专门针对我的问题,我构建了简单的案例程序来添加两个 int,它们位于三个单独的文件中,如下所示:

主.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。我的问题是我想获取方法,该方法将接受bab值(或者在超级方法版本中将手动获取b并从构造函数传递a)。我尝试了很多与指针或定义 Set 和 Get 方法相关的方法,但在我的实现中都失败了 - 我不说它们是错误的,我说我的实现是错误的。为了问题清楚起见,我不会附上它们。

首先,让我们给你的标识符更好的名称:

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的行是成员初始值设定项列表的语法;它初始化成员变量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