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

Как мне инициализировать данные в конструкторе - C++

Восстановить пароль Регистрация
 
serezhka1111
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 11
13.07.2015, 15:07     Как мне инициализировать данные в конструкторе #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//Файл содержит определение функций класса Invoice
#include <iostream>
using std::cout;
using std::endl;
 
#include <string>
using std::string;
 
#include "Invoice.h"
 
Invoice::Invoice(string _article)
{
    setArticle(_article);
}
 
Invoice::Invoice(string _description)
{
    setDescription(_description);
}
 
Invoice::Invoice(int _amount)
{
    setLeftAmount(_amount);
}
 
Invoice::Invoice(int _price)
{
    setPrice(_price);
}
 
 
 
void Invoice::setArticle(string _article)
{
    article = _article;
    cout << "The article is: ";
}
 
string Invoice::getArticle()
{
    return article;
}
 
void Invoice::setDescription(string _description)
{
    description = _description;
    cout << "\nThe description is: ";
}
 
 
string Invoice::getDescription()
{
    return description;
}
 
void Invoice::setLeftAmount(int _amount)
{
    amount = _amount;
    cout << "\nThe amount is: ";
}
 
 
int Invoice::getLeftAmount()
{
    return amount;
}
 
 
void Invoice::setPrice(int _price)
{
    price = _price;
    cout << "\nThe price is: ";
}
int Invoice::getPrice()
{
    return price;
}
 
int Invoice::getInvoiceAmount(int _prmount)
{
    if (amount < 0)
    {
        prmount = 0;
        cout << "\nThe sum of invoice is: " << prmount << endl;
    }
 
    if (amount >= 0)
    {
        prmount = price*amount;
        cout << "The sum of invoice is: " << prmount << endl;
    }
}
Мне нужно в одном конструкторе инициализировать каждый элемент-данных. Вот в таком виде не получается - компилятор выводит ошибку:
Error 1 error C2084: function 'Invoice::Invoice(std::string)' already has a bod
Error 2 error C2084: function 'Invoice::Invoice(int)' already has a body
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2015, 15:07     Как мне инициализировать данные в конструкторе
Посмотрите здесь:

Как инициализировать массив переменной C++
Одну строку инициализировать в программе, другую-ввести с клавиатуры. Сравнить данные строки по длине. C++
Как инициализировать структуру C++
Класс - матрица, как объявить нужную мне матрицу в конструкторе C++
C++ Как инициализировать массив строк в конструкторе
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sashatref
75 / 75 / 27
Регистрация: 21.05.2015
Сообщений: 257
Завершенные тесты: 1
13.07.2015, 15:16     Как мне инициализировать данные в конструкторе #2
во-первых, так делать не надо:
C++
1
2
3
4
5
using std::cout;
using std::endl;
 
#include <string>
using std::string;
а этого достаточно:
C++
1
using namespace std;
во-вторых:
C++
1
2
3
4
5
6
7
8
9
Invoice::Invoice(string _article)
{
    setArticle(_article);
}
 
Invoice::Invoice(string _description)
{
    setDescription(_description);
}
два конструктора с одинаковыми входными параметрами, компилятор не разберется какой в каких случаях использовать

Добавлено через 2 минуты
По всей видимости, проще будет сделать что-то такое:

Invoice(int _amount = 0, int _price = 0, string _artikul = "", string _description = "")
{
//ну и тут инициализируем переменные
}
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,224
13.07.2015, 15:53     Как мне инициализировать данные в конструкторе #3
C++
1
Invoice(int _amount = 0, int _price = 0, string _artikul = "", string _description = "")
ужас
sashatref
75 / 75 / 27
Регистрация: 21.05.2015
Сообщений: 257
Завершенные тесты: 1
13.07.2015, 15:56     Как мне инициализировать данные в конструкторе #4
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
ужас
и что здесь ужасного?
serezhka1111
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 11
13.07.2015, 17:15  [ТС]     Как мне инициализировать данные в конструкторе #5
Инициализация должна происходить при создании объекта. Должен работать код:

C++
1
2
3
4
   Invoice invoice1("4815162342");
    Invoice invoice2("product");
    Invoice invoice3(366);
    Invoice invoice4(100);
sashatref
75 / 75 / 27
Регистрация: 21.05.2015
Сообщений: 257
Завершенные тесты: 1
13.07.2015, 17:19     Как мне инициализировать данные в конструкторе #6
Цитата Сообщение от serezhka1111 Посмотреть сообщение
Инициализация должна происходить при создании объекта. Должен работать код:

C++
1
2
3
4
5
* *
Invoice invoice1("4815162342");
Invoice invoice2("product");
Invoice invoice3(366);
Invoice invoice4(100);
По Вашему коду будет создано 4 переменные, у каждой из которых определен только один параметр.
Я так понимаю что инициализировать нужно все 4 параметра?
тогда нужно написать конструктор как я написал выше:

C++
1
2
3
4
Invoice(int _amount = 0, int _price = 0, string _artikul = "", string _description = "")
{
//...инициализация
}
и затем создавать экземпляры класса таким способом:
C++
1
Invoice invoice1(366, 100, "4815162342", "product");
serezhka1111
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 11
13.07.2015, 17:33  [ТС]     Как мне инициализировать данные в конструкторе #7
Спасибо, попробую.

Добавлено через 10 минут
C++
1
2
3
4
5
6
7
Invoice::Invoice(string _article="", string _description="", int _amount=0, int _price=0)
{
    setArticle(_article);
    setDescription(_description);
    setLeftAmount(_amount);
    setPrice(_price);
}
Так? Все равно ошибка появляется
Avazart
 Аватар для Avazart
6896 / 5136 / 251
Регистрация: 10.12.2010
Сообщений: 22,568
Записей в блоге: 17
13.07.2015, 17:44     Как мне инициализировать данные в конструкторе #8
Цитата Сообщение от sashatref Посмотреть сообщение
во-первых, так делать не надо:
Во первых таких советов делать не стоит.
hoggy
5113 / 2114 / 403
Регистрация: 15.11.2014
Сообщений: 4,799
Завершенные тесты: 1
13.07.2015, 18:40     Как мне инициализировать данные в конструкторе #9
Цитата Сообщение от sashatref Посмотреть сообщение
а этого достаточно:
using namespace std;
правильно. говнокодить нужно учиццо с деццтва.

Цитата Сообщение от serezhka1111 Посмотреть сообщение
Так? Все равно ошибка появляется
это такой тест на телепатию?

показать код (включая функцию main),
и объяснить нормально, что конкретно не работает - не обязательно?
sashatref
75 / 75 / 27
Регистрация: 21.05.2015
Сообщений: 257
Завершенные тесты: 1
13.07.2015, 18:41     Как мне инициализировать данные в конструкторе #10
serezhka1111,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <string>
#include <iostream>
#include <conio.h>
 
class Invoice
{
public:
    Invoice(int _amount = 0, int _price = 0, std::string _artikul = "", std::string _description = "")
    {
        m_amount = _amount;
        m_price = _price;
        m_artikul = _artikul;
        m_description = _description;
    }
 
    void setAmount(int _amoutn) { m_amount = _amoutn; }
    int getAmount() { return m_amount; }
 
    void setPrice(int _price) { m_price = _price; }
    int getPrice() { return m_price; }
 
    void setArtikul(std::string _artikul) { m_artikul = _artikul; }
    std::string getArtikul() { return m_artikul; }
 
    void setDescription(std::string _description) { m_description = _description; }
    std::string getDescription() { return m_description; }
 
private:
    int m_amount;
    int m_price;
    std::string m_artikul;
    std::string m_description;
};
 
int main()
{
    Invoice inv(100, 520, "artikul", "descr");
 
    std::cout << inv.getAmount() << " " << inv.getPrice() << " " << inv.getArtikul() << " " << inv.getDescription();
 
    _getch();
    return 0;
}
Avazart
 Аватар для Avazart
6896 / 5136 / 251
Регистрация: 10.12.2010
Сообщений: 22,568
Записей в блоге: 17
13.07.2015, 18:46     Как мне инициализировать данные в конструкторе #11
sashatref, Откройте для себя списки инициализации, ну и константность.

Добавлено через 1 минуту
Конструктор с параметром C++
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2015, 19:08     Как мне инициализировать данные в конструкторе
Еще ссылки по теме:

C++ Как объявить указатель на массив через typedef и как инициализировать такой тип
Где инициализировать константные данные класса? C++
C++ Как инициализировать массивы?

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

Или воспользуйтесь поиском по форуму:
hoggy
5113 / 2114 / 403
Регистрация: 15.11.2014
Сообщений: 4,799
Завершенные тесты: 1
13.07.2015, 19:08     Как мне инициализировать данные в конструкторе #12
Цитата Сообщение от sashatref Посмотреть сообщение
Invoice(int _amount = 0, int _price = 0, std::string _artikul = "", std::string _description = "")
Цитата Сообщение от sashatref Посмотреть сообщение
int getPrice() { return m_price; }
списки инициализации
граммар-конст
ссылочная семантика
квалификаторы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <string>
#include <iostream>
 
 
class Invoice
{
public:
    Invoice(const int _amount = 0, const int _price = 0, const std::string& _artikul = "", const std::string& _description = "")
        : m_amount(_amount)
        , m_price(_amount)
        , m_artikul(_artikul)
        , m_description(_description)
    {}
 
    void setAmount(const int _amoutn) { m_amount = _amoutn; }
    int getAmount()const              { return m_amount;    }
 
    void setPrice(const int _price) { m_price = _price; }
    int getPrice()const             { return m_price;   }
 
    void setArtikul(const std::string& _artikul) { m_artikul = _artikul; }
    const std::string& getArtikul()const         { return m_artikul;     }
    std::string& getArtikul()                    { return m_artikul;     }
 
    void setDescription(const std::string& _description) { m_description = _description; }
    const std::string& getDescription()const             { return m_description;         }
    std::string& getDescription()                        { return m_description;         }
    
    
    template<class T> friend std::basic_ostream<T>&
    operator<< (std::basic_ostream<T>& os, const Invoice& obj)
    {
        return os << obj.getAmount() << " " << obj.getPrice() << " " << obj.getArtikul() << " " << obj.getDescription();
    }
        
 
private:
    int m_amount;
    int m_price;
    std::string m_artikul;
    std::string m_description;
};
 
int main()
{
    Invoice inv(100, 520, "artikul", "descr");
    
    std::cout << inv <<std::endl;
}
сюда ещё можно добавить спецификатор:
"босает ли функция исключение".

но я как то профакапил его.
хотя по уму конечно нужно на такие вещи тоже обращать внимание.
Yandex
Объявления
13.07.2015, 19:08     Как мне инициализировать данные в конструкторе
Ответ Создать тему
Опции темы

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