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

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

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

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

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

Параметры не передаются в конструктор класса - C++
Всем привет, у меня такая проблема. Параметры не передаются в конструктор класса. Telem *c; try{ c = new...

Параметры типа класса шаблона - C++
смотрите был такой код в файле заголовочном: template <typename DataType> class CircleList { ..................... а преподаватель...

Не типовые параметры в шаблоне класса - C++
Начал изучать шаблоны и вроде все было хорошо, но в задании с использованием в шаблоне не типового параметра встал... вот что получилось......

Реализовать динамический массив объектов, учитывая, что параметры для конструктора у каждого объекта разные - C++
Здравствуйте.Чёткого ответа на просторах интернета не нашёл , поэтому пишу сюда. Есть класс, нужен динамический массив объектов этого...

Нужно из класса наследника передать параметры в класс родителя - C++
#include <stdio.h> #include <conio.h> #include <math.h> class ploskost{ protected: float d; int x1,y1,x2,y2; public: ...

Как передать параметры конструктора одного класса другому? - C++
Скажите пожалуйста, как это должно работать? Как передать параметры конструктора одного класса другому? #include <iostream> using...

Создание объекта класса - C++
Создал свой класс с именем и фамилией, не могу создать объект этого класса, при проверке на ошибки всё нормально. Person.h #pragma once...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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; }
Так ?
go
Эксперт C++
3586 / 1366 / 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
~ Эврика! ~
1243 / 992 / 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
~ Эврика! ~
1243 / 992 / 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     Параметры объекта класса
Еще ссылки по теме:

Объявление объекта класса - C++
Доброе время суток! Дело вот в чем: В конструкторе c параметрами класса Piramida, мне нужно создать объект класса M_Ygolnik с...

Создание объекта класса - C++
Здравствуйте, подскажите пожалуйста в чем разница между Test t(блаблабла); и Test *t = new Test(блаблабла); Я так понимаю что...

Адрес объекта класса - C++
как можно получить адресс обьекта класса например создаю я класс в котором будет указатель типа моего класса, и мне надо в конструкторе...

Сложить 2 объекта класса - C++
Вечер добрый! Собственно не могу сообразить как это реализовать :( остановился пока на этом: class sum{ int a; //вот мои 2 поля...

Манипуляция объекта класса - C++
Как сделать возможной следующую ситуацию: class P { int f; }; ... P p; if(p){}//допустим, относительно значения f


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

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

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