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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
crazy32maze
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 24
#1

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

13.12.2012, 23:22. Просмотров 431. Ответов 7
Метки нет (Все метки)

Здравствуйте! Очень мучает следующий вопрос.

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

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" и "с". Или "а" и "с". В общем со всеми возможными вариантами и тогда конструкторы будут конфликтовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2012, 23:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Параметры объекта класса (C++):

Проверка создания объекта класса BBB из класса AAA и работа с ним - C++
#define @param2; // объявили для выяснения случая: нужен новый или использовать существующий. Class AAA { private: void...

Объявление объекта класса fstream в качестве статической компоненты другого класса - C++
Доброго времени суток. Есть задание, в котором говорится "...Перепишите программы из упражнений 4 и 6 таким образом, чтобы использовать...

Возможно ли создание объекта шаблонного класса в функции этого класса? - C++
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание - реализовать шаблон контейнера (множество) с операциями...

Создание объекта класса с полем являющимся объектом другого класса - C++
Bill a; cin>>a;//тут я ввел с помощью перегруженного оператора ElementSpiska c; //поля у Spiska(Bill A,int,string,int) ...

Ошибка компиляции (преобразование объекта класса в объект другого класса) - C++
Друзья, добрый день! Не могу понять почему выдается ошибка компиляции... Прога преобразует доллары США в старые Британские фунты. Но...

Указатель на объект базового класса и адрес объекта производного класса - C++
Пример кода: class Class1 { public: Class1(int x) { j = new int; *j = x; } ~Class1() {delete j;}

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

Добавлено через 1 минуту
crazy32maze, а понял вас. Так нельзя. Нужно создавать отдельные методы SetA, SetB, etc.
0
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.
А можно пример кода, как это будет выглядеть? Потому что в упор не понимаю.
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 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-конструкторы и т. п. Идея должна быть понятна.
0
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»|
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.12.2012, 23:49 #7
My bad, я уже ниндзя-дописал звёдочку перед this, допишите и вы.
0
crazy32maze
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 24
13.12.2012, 23:57  [ТС] #8
~OhMyGodSoLong~, Спасибо за помощь=) Хотя ничего не понимаю, но буду разбираться)
0
13.12.2012, 23:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2012, 23:57
Привет! Вот еще темы с ответами:

Использование объекта одного класса при создании нового класса - C++
Добрый вечер. У меня такая проблема. Есть готовый класс L2 - список, на его основе нужно создать дек. Я поступил так: в приватной части...

Реализовать оператор= для присваивания объекта класса-потомка объекту базового класса - C++
Есть два класса A и B, причем класс B является потомком A. Как реализовать следующее: obj_A = obj_B и obj_B = obj_A? Добавлено через 9...

Как в классе А у объекта класса B вызвать метод класса B ? - C++
Есть Класс A и класс B . В классе B лежит объект типа ArrayList , назовём его arrayList, в этом же классе есть метод push() . Возможно ли в...

Объявление объекта одного класса в описании другого класса - C++
Здравствуйте. Почему при объявлении Student s в классе Teacher не возникает ошибки? Ведь такой объект уже существует. И почему при...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru