class MyClass{
public:
void method(int);
........
private:
int prop;
........
}
void MyClass::method(int param=this->prop){...}
Аргумент метода по умолчанию и члены класса
А возможно присваивать аргументу метода класса значение по умолчанию, равное значению какого-либо члена класса?
Вот что я имею ввиду:
Код:
Таким макаром не работает. Привёл этот код только для того, что-бы наглядно показать чего я хочу.
В доках так и не нашёл ничего на эту тему =(
Код:
class MyClass{
public:
void method(int);
void method() {
method(this->prop);
}
........
private:
int prop;
........
}
public:
void method(int);
void method() {
method(this->prop);
}
........
private:
int prop;
........
}
В моём случае, наверное, лучше даже будет сделать вот так:
Код:
class MyClass{
public:
void method() {
method(this->prop);
}
........
private:
void method(int);
int prop;
........
}
public:
void method() {
method(this->prop);
}
........
private:
void method(int);
int prop;
........
}
Это единственный адекватный выход?
Код:
class MyClass{
public:
void method(int param=prop);
........
private:
static int prop;
........
}
void MyClass::method(int param){...}
public:
void method(int param=prop);
........
private:
static int prop;
........
}
void MyClass::method(int param){...}
Цитата: patison
В моём случае, наверное, лучше даже будет сделать вот так:
А в чем тогда смысл метода?
Lerkin: рекурсия. Класс, скажем, дерева (Tree). Нужен рекурсивный метод обхода дерева, который должен прининмать нужную ячейку. Т.е. при первом вызове этого метода, нужно передать корень дерева (если говорить об обычном связном списке - то голову списка), который извне недоступен. Можно конечно извратиться и написать метод getRoot(), и из main делать что-то типа
Код:
myTree.traverse( myTree.getRoot() );
но это дикий изврат.
Цитата: patison
Kogrom: а обязательно static int ?
В разделе 8.3.6 приводится пример:
Код:
int b;
class X {
int a;
int mem1(int i = a); // error: nonstatic member a
// used as default argument
int mem2(int i = b); // OK; use X::b
static int b;
};
class X {
int a;
int mem1(int i = a); // error: nonstatic member a
// used as default argument
int mem2(int i = b); // OK; use X::b
static int b;
};
В смысл глобального b в примере я не вникал. Но раз в он есть, то привёл.
А static , похоже, обязателен...
Спасибо.
Правда, подход Green'а как-то больше по душе =)
Код:
class MyClass{
public:
void method(int param) { .... }
void method() { this->method(this->prop); }
........
private:
int prop;
........
}
public:
void method(int param) { .... }
void method() { this->method(this->prop); }
........
private:
int prop;
........
}
sigmov : ну, грин, во втором посте, по-моему это и предложил =))