我环顾四周并做了一些谷歌搜索,但我找不到合适的关键字来找到我的问题的解释。我希望你们中的一些人可以提供帮助。在谈到C ++时,我仍然相当新,没有受过教育,但我觉得在重载函数时,我实际上已经知道要做什么,但显然我还没有完全掌握它。 / p>
基本上,我试图重载一个函数,根据实际提供的变量将某些变量初始化为默认值。我想我可能会使用默认值,但我很想知道它们是如何工作的。
所以实际的代码看起来像这样:
#pragma once
#include <string>
class Foo
{
private:
int a;
int b;
int c;
int d;
bool boo;
std::string baz;
public:
Foo();
void init(int _a, int _b, int _c, int _d, bool _boo, std::string _baz);
void init(int _a, int _b, int _c, bool _boo);
void init(int _a, int _b, int _d, std::string _baz);
void printData();
};
#include <iostream>
#include "foo.h"
Foo::Foo(){
}
void Foo::init(int _a, int _b, int _c, int _d, bool _boo, std::string _baz) {
a = _a;
b = _b;
c = _c;
d = _d;
boo = _boo;
baz = _baz;
}
void Foo::init(int _a, int _b, int _c, bool _boo) {
a = _a;
b = _b;
c = _c;
d = 0;
boo = _boo;
baz = "";
}
void Foo::init(int _a, int _b, int _d, std::string _baz){
a = _a;
b = _b;
c = -1;
d = _d;
boo = 0;
baz = _baz;
}
void Foo::printData() {
std::cout << "a = " << a << " | b = " << b << " | c = " << c << " | d = " << d << " | boo = " << boo << " | baz = " << baz << std::endl;
}
#include "foo.h"
Foo foo_1;
Foo foo_2;
Foo foo_3;
int main(int argc, char const *argv[])
{
foo_1.init(1,2,3,4,false, "First"); // All variables are set by arguments
foo_2.init(1,2,3,false); // d and baz are set to a default value
foo_3.init(1,2,4,"Thrid"); // c and boo are set to a default value
foo_1.printData();
foo_2.printData();
foo_3.printData();
return 0;
}
我在运行Raspbian的RaspberryPi上使用g ++编译此代码。我使用的命令如下:
g++ -o test main.cpp foo.cpp foo.h
现在,鉴于我对c ++的了解有限,我希望输出看起来像这样:
a = 1 | b = 2 | c = 3 | d = 4 | boo = 0 | baz = First
a = 1 | b = 2 | c = 3 | d = 0 | boo = 0 | baz =
a = 1 | b = 2 | c = -1 | d = 4 | boo = 0 | baz = Third
但它是这样的:
a = 1 | b = 2 | c = 3 | d = 4 | boo = 0 | baz = First
a = 1 | b = 2 | c = 3 | d = 0 | boo = 0 | baz =
a = 1 | b = 2 | c = 4 | d = 0 | boo = 1 | baz =
有人可以向我解释我哪里出错了,我该怎么办呢?谢谢!
快速侧面说明;我确实意识到可以使用实际的初始化代替我自己的inits,但是在项目中我实际上是这样做的,我需要大范围的Foo对象,同时只有在一些代码已经完成之后仍然初始化它们已经运行了。
答案 0 :(得分:0)
您引用的“字符串”被解释为“const char [6],然后是const char *”并转换为布尔值而不是std :: string类。您可以通过添加类型转换强制转换为字符串,例如
foo_3.init(1,2,4,static_cast<std::string>("Thrid"));