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

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

Войти
Регистрация
Восстановить пароль
 
bigar
53 / 53 / 23
Регистрация: 18.02.2011
Сообщений: 146
#1

Конструктор - C++

09.04.2011, 20:19. Просмотров 432. Ответов 9
Метки нет (Все метки)

скажите пожалуйста
зачем в конструкторе мы переменным присваиваем 0?
Complex(double r=0,double i=0)
{
real=r;
im=i;
}
если записать

Complex(double r,double i)
{
real=r;
im=i;
}
Complex d(2,3);
будет ошибка. Почему???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2011, 20:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор (C++):

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования - C++
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных задаются длины трех сторон треугольника. Класс...

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор) - C++
class Test { int i; public: void test(int i) { this -> i = i; } }; Конструктор Test::Test всегда вызывается...

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром? - C++
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1) : x(y) {} };

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно» - C++
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по умолчанию, конструктор с параметрами....

Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику - C++
#include "stdafx.h" #include <iostream> #include <conio.h> #include <windows.h> #include <math.h> #include <algorithm> using...

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно? - C++
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

9
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
09.04.2011, 20:29 #2
Хм... Вообще не должно быть ошибки. Попробуйте создавать объект так (для верности):
C++
1
Complex d(2.0, 3.0);
Хотя в теории типы должны бы приводиться автоматически.
А "присваиваем 0" - на самом деле задаём аргументы по-умолчанию. Т.е. если вы напишите так:
C++
1
Complex v;
то это будет эквивалентно
C++
1
Complex v(0.0, 0.0);
т.е. нули присвоятся по-умолчанию.
0
bigar
53 / 53 / 23
Регистрация: 18.02.2011
Сообщений: 146
09.04.2011, 20:42  [ТС] #3
C++
1
2
3
4
5
6
7
complex operator+(complex& t)
{
complex ob; // тут ошибочка нет подходящего конструктора по умолчанию
ob.real=real +t.real;
ob.im=im+t.im;
return ob;
}
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
09.04.2011, 20:45 #4
Ну это понятно, если вы убрали = 0 в конструкторе. Можно ещё использовать такую конструкцию:
C++
1
2
3
4
5
6
7
8
9
10
11
Complex():
real(0.0),
im(0.0)
{
}
 
Complex(double r, double i):
real(r),
im(i)
{
}
Т.е. есть конструктор по-умолчанию и конструктор с параметрами. Но вариант с аргументами по-умолчанию компактнее.
0
vitaska
86 / 86 / 2
Регистрация: 04.02.2010
Сообщений: 162
09.04.2011, 20:50 #5
либо так
C++
1
2
3
4
5
6
7
8
9
10
11
Complex()
{
  real=0.0;
  im=0.0;
}
 
Complex(double r, double i)
{
  real=r;
  im=i;
}
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
09.04.2011, 20:52 #6
И всё-таки лучше первый вариант. Всю инициализацию, какую только можно, лучше проводить через списки инициализации. Тело конструктора - более сложная работа.
1
bigar
53 / 53 / 23
Регистрация: 18.02.2011
Сообщений: 146
09.04.2011, 20:55  [ТС] #7
Т. Е. я должен задать параметры по -умолчанию обязательно (могу любые а процессе работы могу их изменять), а если не задать то получается не правильная сама конструкция????
0
vitaska
86 / 86 / 2
Регистрация: 04.02.2010
Сообщений: 162
09.04.2011, 20:56 #8
Цитата Сообщение от silent_1991 Посмотреть сообщение
И всё-таки лучше первый вариант. Всю инициализацию, какую только можно, лучше проводить через списки инициализации. Тело конструктора - более сложная работа.
я еще не большой спец по классам, просто написал как знаю.
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
09.04.2011, 20:58 #9
bigar, если у вас нет конструктора по-умолчанию (но есть конструктор с параметрами или копии, т.е. в случае, когда компилятор автоматически не создаст конструктор по-умолчанию), то вы не можете просто написать Complex v;, поскольку компилятор просто не знает, как создавать объект по-умолчанию. Я показал два вариант, как можно сделать - либо использовать параметры по-умолчанию в конструкторе с параметрами и, таким образом, обойтись одним конструктором, либо создать два конструктора - по-умолчанию и с параметрами.
1
bigar
53 / 53 / 23
Регистрация: 18.02.2011
Сообщений: 146
09.04.2011, 21:04  [ТС] #10
все понял)) СПС))
0
09.04.2011, 21:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2011, 21:04
Привет! Вот еще темы с ответами:

Конструктор производного класса требует конструктор предка - C++
Выдаёт вот такую вот ошибку: no matching function for call to 'Cube::Cube()' class Cube { protected: int magInt; bool...

Конструктор инициализации, конструктор копирования, деструктор - C++
Я сделал почти задание по перегрузке операторов. Осталось одно, тоесть три: конструктор инициализации, конструктор копирования, деструктор....

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор - C++
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать конструктор по умолчанию, копирования и...

Конструктор класса не видит конструктор по умолчанию другого класса - C++
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса TailNode нет конструктора по умолчанию, хотя он там, конечно, есть....


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

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

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