0 / 0 / 0
Регистрация: 18.05.2019
Сообщений: 14
1

Инициализация аргумента конструктора

03.12.2019, 21:25. Показов 434. Ответов 5
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
CComplexVector(size_t size = 0, CComplex cd=(0,0))
    {
        if (size)
        {
            length = size;
            v = new CComplex[length];
            for (size_t i = 0; i < length; i++)
                this->v[i] = cd;
        }
    }
Почему в аргументах конструктора вместо CComplex cd=(0,0) нельзя написать CComplex cd ? Мне хочется, чтобы при вызове конструктора экземляр класса имел только длину и не был заполнен нулями.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2019, 21:25
Ответы с готовыми решениями:

Инициализация конструктора по умолчанию
почему если инициализировать поля класса в конструкторе по умолчанию так: MyClass::MyClass() {...

Инициализация конструктора класса
инициализация конструктора класса Rectangle::Rectangle(int w, int h): itsWidth(w),...

Инициализация конструктора initializer_list <pair<.,.>>
Привет, помогите разобратся, не могу понять что я делаю не так. class A { private: ...

Инициализация конструктора базового класса
class animal { public: animal(int a):ianimal(a){} protected: int ianimal; }; ...

5
6571 / 4556 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
03.12.2019, 22:23 2
Цитата Сообщение от Ouou12 Посмотреть сообщение
Почему в аргументах конструктора вместо CComplex cd=(0,0) нельзя написать CComplex cd ? Мне хочется, чтобы при вызове конструктора экземляр класса имел только длину и не был заполнен нулями.
Напиши CComplexVector(size_t size = 0, CComplex cd= CComplex(1, 2))
0
0 / 0 / 0
Регистрация: 18.05.2019
Сообщений: 14
03.12.2019, 22:27  [ТС] 3
Зачем? Я хочу вызвать конструктор: CComplexVector a(5) и мне хочется, чтобы объект a не заполнялся нулями
0
6571 / 4556 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
03.12.2019, 22:29 4
Цитата Сообщение от Ouou12 Посмотреть сообщение
Зачем? Я хочу вызвать конструктор: CComplexVector a(5) и мне хочется, чтобы объект a не заполнялся нулями
Ну так и вызови CComplexVector a(5, CComplex(1, 2)), заполнится ненулями
0
0 / 0 / 0
Регистрация: 18.05.2019
Сообщений: 14
03.12.2019, 23:27  [ТС] 5
Я имел в виду заполнение "пустотой".
0
16269 / 8828 / 2166
Регистрация: 30.01.2014
Сообщений: 15,249
03.12.2019, 23:54 6
Ouou12,

C++
1
2
3
4
5
6
CComplexVector(size_t size = 0, CComplex cd = CComplex())
    : length(size), v(length ? new CComplex[length] : 0)
{
    for (size_t i = 0; i < length; i++)
        v[i] = cd;
}
Если не хотите, чтобы CComplex() приводил к инициализации нулями (т.е., насколько вы объяснили, нужно именно отсутствие инициализации его полей), сделайте конструктор для класса CComplex с соответствующим поведением.
Если не знаете как, то выкладывайте больше кода, чтобы мне его можно было поправить.

Добавлено через 5 минут
Есть еще один вариант, он в принципе даже лучше.
Нужно сделать два конструктора.
Один такой, с инициализацией.
C++
1
2
3
4
5
6
CComplexVector(size_t size, CComplex cd)
    : length(size), v(length ? new CComplex[length] : 0)
{
    for (size_t i = 0; i < length; i++)
        v[i] = cd;
}
Другой такой, без:
C++
1
2
3
4
explicit CComplexVector(size_t size = 0)
    : length(size), v(length ? new CComplex[length] : 0)
{
}
Правда конструктор CComplex, который не делает инициализацию полей, все-таки надо будет написать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2019, 23:54
Помогаю со студенческими работами здесь

Инициализация статических объектов без конструктора
Что-то я как ни вертел этот код, он у меня не заработал. Как я понял, смысл в том что не надо...

Инициализация членов производного кл. из конструктора базового кл.
Добрый вечер, уважаемые форумчане! Сразу код; вопрос ниже... #include &lt;iostream&gt; using...

Вложенные классы, пространство имен и инициализация конструктора
ребята, висят эти вопросы. я гуглил. толку мало. объясните пожалуйста #include...

Инициализация в теле конструктора или в списке инициализации.
Здрасте. class random1 { public: random(): a(5) {} private: int a; };


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru