Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Аргумент метода по умолчанию и члены класса

444
24 февраля 2010 года
patison
323 / / 15.03.2007
Друзья, вопрос в следующем.
А возможно присваивать аргументу метода класса значение по умолчанию, равное значению какого-либо члена класса?
Вот что я имею ввиду:
 
Код:
class MyClass{
    public:
        void method(int);
........
    private:
        int prop;
........
}

void MyClass::method(int param=this->prop){...}

Таким макаром не работает. Привёл этот код только для того, что-бы наглядно показать чего я хочу.

В доках так и не нашёл ничего на эту тему =(
3
24 февраля 2010 года
Green
4.8K / / 20.01.2000
Код:
class MyClass{
    public:
        void method(int);

        void method() {
            method(this->prop);
        }

........
    private:
        int prop;
........
}
444
24 февраля 2010 года
patison
323 / / 15.03.2007
Хехе . как-то не подумал вообще о перегрузке ))
В моём случае, наверное, лучше даже будет сделать вот так:
Код:
class MyClass{
    public:
        void method() {
            method(this->prop);
        }

........
    private:
        void method(int);
        int prop;
........
}

Это единственный адекватный выход?
87
24 февраля 2010 года
Kogrom
2.7K / / 02.02.2008
Метод от Green наиболее красивый. Но всё же попытаюсь дополнить менее красивым, но приведенным в стандарте.

 
Код:
class MyClass{
    public:
        void method(int param=prop);
........
    private:
        static int prop;
........
}

void MyClass::method(int param){...}
9
24 февраля 2010 года
Lerkin
3.0K / / 25.03.2003
Цитата: patison

В моём случае, наверное, лучше даже будет сделать вот так:


А в чем тогда смысл метода?

444
24 февраля 2010 года
patison
323 / / 15.03.2007
Kogrom: а обязательно static int ?

Lerkin: рекурсия. Класс, скажем, дерева (Tree). Нужен рекурсивный метод обхода дерева, который должен прининмать нужную ячейку. Т.е. при первом вызове этого метода, нужно передать корень дерева (если говорить об обычном связном списке - то голову списка), который извне недоступен. Можно конечно извратиться и написать метод getRoot(), и из main делать что-то типа
 
Код:
myTree.traverse( myTree.getRoot() );

но это дикий изврат.
87
24 февраля 2010 года
Kogrom
2.7K / / 02.02.2008
Цитата: 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;
};

В смысл глобального b в примере я не вникал. Но раз в он есть, то привёл.
444
24 февраля 2010 года
patison
323 / / 15.03.2007
Ну я думаю что глобальный b был приведён просто для наглядности. хотя никакого смысла не несёт.
А static , похоже, обязателен...
Спасибо.

Правда, подход Green'а как-то больше по душе =)
842
26 февраля 2010 года
sigmov
301 / / 16.09.2008
На ум приходит следующее.....
 
Код:
class MyClass{
    public:
        void method(int param) { .... }
        void method() { this->method(this->prop); }
........
    private:
        int prop;
........
}
444
27 февраля 2010 года
patison
323 / / 15.03.2007
sigmov : ну, грин, во втором посте, по-моему это и предложил =))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог