Могу ли я указывать значения по умолчанию одновременно, как в МЕТОДЕ 1, или использовать перегруженный конструктор, как в МЕТОДЕ 2, или с списком инициализации, как в МЕТОДЕ 3/4?Значения по умолчанию аргументов в конструкторе C++
Какой способ лучше/правильно и почему (все они работают)?
И какова разница между МЕТОДОМ 3 и 4 - следует ли указывать объявление первого конструктора, а затем следующее определение вне класса или я могу сразу определить определение?
СПОСОБ 1:
#include <iostream>
#include <string>
using namespace std;
const string GLOBAL_VAR = "XXX";
class Object
{
private:
string var;
public:
Object(string inArg = "yyy")
{
this->var = GLOBAL_VAR + inArg + "ZZZ";
}
string show()
{
return this->var;
}
};
int main() {
Object o1, o2("www");
cout << o1.show() << endl;
cout << o2.show() << endl;
system("pause");
}
СПОСОБ 2:
#include <iostream>
#include <string>
using namespace std;
const string GLOBAL_VAR = "XXX";
class Object
{
private:
string var;
public:
Object()
{
this->var = GLOBAL_VAR + "yyyZZZ";
}
Object(string inArg)
{
this->var = GLOBAL_VAR + inArg + "ZZZ";
}
string show()
{
return this->var;
}
};
int main() {
Object o1, o2("www");
cout << o1.show() << endl;
cout << o2.show() << endl;
system("pause");
}
СПОСОБ 3:
#include <iostream>
#include <string>
using namespace std;
const string GLOBAL_VAR = "XXX";
class Object
{
private:
string var;
public:
//declaration:
Object();
Object(string);
string show()
{
return this->var;
}
};
//definition:
Object::Object() : var(GLOBAL_VAR + "yyyZZZ") {}
Object::Object(string inArg) : var(GLOBAL_VAR + inArg + "ZZZ"){}
int main() {
Object o1, o2("www");
cout << o1.show() << endl;
cout << o2.show() << endl;
system("pause");
}
МЕТОД 4:
#include <iostream>
#include <string>
using namespace std;
const string GLOBAL_VAR = "XXX";
class Object
{
private:
string var;
public:
//declaration and definition in one:
Object() : var(GLOBAL_VAR + "yyyZZZ") {}
Object(string inArg) : var(GLOBAL_VAR + inArg + "ZZZ") {}
string show()
{
return this->var;
}
};
int main() {
Object o1, o2("www");
cout << o1.show() << endl;
cout << o2.show() << endl;
system("pause");
}
В C++ вам не нужна нотация 'this->'. Получите доступ к переменным-членам напрямую. –
Разница между методом 2 и 3. Разница между методом 2 и 4 заключается в том, что один использует списки инициализаторов, а другой нет. Это означает, что методы 2, 3 и 4 одинаковы. Что касается того, что является «лучшим», это зависит от того, что вы думаете, это субъективно и мнение. –