Форум программистов, компьютерный форум CyberForum.ru

Параметры объекта класса - C++

Восстановить пароль Регистрация
 
crazy32maze
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 24
13.12.2012, 23:22     Параметры объекта класса #1
Здравствуйте! Очень мучает следующий вопрос.

Вот допустим, есть у нас класс, в нем конструктор:

C++
1
2
3
4
5
6
class volume
{
    int a,b,c;
    public: 
    volume (int pa=0, int pb=0, int pc=0) {a=pa; b=pb; c=pc;}
}
Соответственно, для этого класса есть объект, допустим one.

C++
1
2
3
4
volume one; //объект будет использовать параметры по умолчанию из конструктора.
volume one(12); //a=12
volume one(12,32); //a=12; b=32;
volume one(12,32,44); //a=12; b=32; c=44.
А как сделать так, чтобы, например, параметр "а" брался из конструктора со значением по умолчанию, "b" задавался в самом объекте, ну и "с" тоже, к примеру, брался бы из конструктора?
Вариант создать конструктор, типа
C++
1
volume(int pb) {a=0; b=pb; c=0}
не подходит. Потому что может потребоваться ввести одну "с". Или "b" и "с". Или "а" и "с". В общем со всеми возможными вариантами и тогда конструкторы будут конфликтовать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
13.12.2012, 23:23     Параметры объекта класса #2
C++
1
    volume (int pb=0, int pc=0) {b=pb; c=pc; a = 15; }
Так ?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
13.12.2012, 23:29     Параметры объекта класса #3
Цитата Сообщение от crazy32maze Посмотреть сообщение
не подходит. Потому что может потребоваться ввести одну "с". Или "b" и "с". Или "а" и "с". В общем со всеми возможными вариантами и тогда конструкторы будут конфликтовать.
Перегрузить конструктор

Добавлено через 1 минуту
crazy32maze, а понял вас. Так нельзя. Нужно создавать отдельные методы SetA, SetB, etc.
crazy32maze
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 24
13.12.2012, 23:32  [ТС]     Параметры объекта класса #4
Цитата Сообщение от sovaz1997 Посмотреть сообщение
C++
1
    volume (int pb=0, int pc=0) {b=pb; c=pc; a = 15; }
Так ?
Нет. Ведь если у меня будет в добавок конструктор
C++
1
volume(int pa=0, int pc=0) {a=pb; c=pc; b=16;}
по-моему, произойдет конфликт.

Добавлено через 1 минуту
Цитата Сообщение от go Посмотреть сообщение
SetA, SetB, etc.
А можно пример кода, как это будет выглядеть? Потому что в упор не понимаю.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.12.2012, 23:39     Параметры объекта класса #5
Цитата Сообщение от crazy32maze Посмотреть сообщение
Здравствуйте! Очень мучает следующий вопрос.
Welcome to the Builder pattern!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class volume {
    int a, b, c;
public: 
    volume(int a = 0, int b = 0, int c = 0) : a(a), b(b), c(c) {}
 
    class builder {
        int a_, b_, c_;
    public:
        builder() : a_(0), b_(0), c_(0) {} // значения по умолчанию
        builder& a(int value) { a_ = value; return *this; }
        builder& b(int value) { b_ = value; return *this; }
        builder& c(int value) { c_ = value; return *this; }
 
        volume get() { return volume(a_, b_, c_); }
    };
};
 
volume vol1 = volume::builder().a(42).c(9).get(); // a <- 42, b <- умолчательный 0, c <- 9
По желанию клепаются всякие варианты для создания с помощью new, move-конструкторы и т. п. Идея должна быть понятна.
crazy32maze
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 24
13.12.2012, 23:46  [ТС]     Параметры объекта класса #6
~OhMyGodSoLong~,
В 10-й, 11-й и 12-й строке такая ошибка:
invalid initialization of non-const reference of type «volume::builder&» from an rvalue of type «volume::builder* const»|
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.12.2012, 23:49     Параметры объекта класса #7
My bad, я уже ниндзя-дописал звёдочку перед this, допишите и вы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2012, 23:57     Параметры объекта класса
Еще ссылки по теме:

В строке первого объекта класса слово MAX длины заменить на слово MAX длины второго объекта класса C++
C++ Параметры не передаются в конструктор класса
Нужно из класса наследника передать параметры в класс родителя C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
crazy32maze
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 24
13.12.2012, 23:57  [ТС]     Параметры объекта класса #8
~OhMyGodSoLong~, Спасибо за помощь=) Хотя ничего не понимаю, но буду разбираться)
Yandex
Объявления
13.12.2012, 23:57     Параметры объекта класса
Ответ Создать тему
Опции темы

Текущее время: 00:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru