如何从类构造函数传递值C++作为此类方法的默认参数?
How to pass value from C++ class constructor as a default argment of method of this class?
我想用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。我的问题是我想获取方法,该方法将接受b
或a
并b
值(或者在超级方法版本中将手动获取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
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在静态库中嵌入类方法
- 如何制作一个将函数作为参数的类方法
- 从父类方法返回子类对象
- 使用用户定义的参数调用future/async并调用类方法
- 重载类方法的不明确调用
- 单独定义模板化嵌套类方法的正确语法
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 如何访问由共享指针保存的类方法?
- 将子类方法声明为基类的友元
- 我的模板类方法返回错误类型?
- Qt将信号与另一个类方法连接
- 我无法使用C++指针指向类方法返回的 std::vector
- 存储具有许多变体的类的默认值的推荐方法是什么?
- 重载方法的类接受模板和基类 - 如何默认某个方法
- 派生类方法的默认参数的最佳实践
- 将类成员 (Map) 的指针作为默认参数传递给另一个类方法
- 使用类属性值作为方法默认参数的替代方法
- 模板类方法的默认参数
- 是否可以使用构造函数或对象作为其他类方法的参数默认值?