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

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

Войти
Регистрация
Восстановить пароль
 
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
#1

Вопрос о создаваемом экземпляре класса - C++

01.08.2010, 13:03. Просмотров 349. Ответов 8
Метки нет (Все метки)

Здравствуйте, вот простейший класс.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A {
 int i, j;
 public: //A () {i=0; j=0;}
 void set (int a, int b) {i=a; j=b;}
 void show ();
};
 
void A::show() {
 cout <<i<<' '<<j<<endl;
}
 
int _tmain (int argc, _TCHAR* argv[])
{
 A a1;
 a1.show();
}
Как видите, я не инициализировал переменные i и j, также закомментировал конструктор, вывел их при помощи функции show. Получилось, что они сами инициализировались нулями. Выходит, конструктор, который я закомментировал, бесполезен в принципе?
Что с ним, что без него переменные i и j стали нулями.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2010, 13:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопрос о создаваемом экземпляре класса (C++):

Параметр в экземпляре класса - C++
Добрый день всем. имеется обрывок класса template &lt;class TKey, class TStoredData&gt; class FixedCache { public: enum...

Перегрузка операторов при динамическом экземпляре класса - C++
Добрый день. Имею: class Single { int a; int b; ~Single(){}; public: .... static void destroyedObj(Single* d) //...

Сам вопрос: почему функция-член одного класса не вызывается из функции-члена другого класса? - C++
//Щас всё объясню. Так, имеем два класса, в одном я определил функцию-член. Все конструкторы и прочее //опущены для уменьшения кода ...

Вопрос по методам класса - C++
Всем привет. Можно как-нибудь объявить класс так чтобы при инициализации одномерного массива arr(i) был доступен только get(x), при...

Вопрос по функциям класса - C++
class vector { private: double x; double y; double z; public: vector(); vector(double a, double b, double c); ...

Теоретический вопрос. ( метод класса) - C++
Допускается ли при описании класса и его методов, ситуация когда один метод вызывает другой метод этого же класса? Или же только в ...

8
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
01.08.2010, 13:19 #2
Red Planet, компилятор сгенерировал для твоего класса конструктор по умолчанию (который инициализировал значения переменных-членов значениями по умолчанию).

Добавлено через 2 минуты
Также компилятор может сгенерировать конструктор копирования. Если ты не хочешь, чтобы он это сделал, помести прототип конструктора в секцию private

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class A 
{
 int i, j;
 A();//Конструктор по умолчанию теперь не доступен
 public:
 void set (int a, int b) {i=a; j=b;}
 void show ();
};
 
void A::show() {
 cout <<i<<' '<<j<<endl;
}
 
int _tmain (int argc, _TCHAR* argv[])
{
 A a1; //При компиляции этой строки произойдет ошибка
 a1.show();
}
0
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
01.08.2010, 18:18  [ТС] #3
Nameless One, как оказалось, я не совсем прав-то был. Мне кажется, что компилятор назначил мои числа не нулями, а цифрами, которыми ему вздумалось, так как при следующем коде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class C {
    int x, y;
    public: void show ();
};
 
void C::show() {
    cout <<x<<' '<<y;
}
 
int _tmain(int argc, _TCHAR* argv[]) {
    C c1;
    c1.show();
    system("pause");
    return 0;
}
пишется, что x и y равны 256 и 1 соответственно.
0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
01.08.2010, 18:22 #4
Конструктор по умолчанию все-равно генерируется (в данном случае, скорее всего, пустой), так что лучше определить собственный конструктор, а не оставлять инициализацию переменных-членов на совесть компилятора
1
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
01.08.2010, 18:31  [ТС] #5
Nameless One, спасибо, понял. Из соображений оптимизации кода создавал тему: не хотелось писать конструктор, который не нужен. Однако оказалось, что писать надо его.
0
fasked
01.08.2010, 18:43
  #6

Не по теме:

Цитата Сообщение от Red Planet Посмотреть сообщение
Однако оказалось, что писать надо его.
лучше один раз написать и держать все под контролем, чем сталкиваться с подобными неприятностями

1
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
01.08.2010, 19:29  [ТС] #7
Не знаю, куда писать об этом, но мне кажется, что мой вопрос можно включить в список часто задаваемых. Новичкам, желающим научиться, будет на один неразрешенный вопрос меньше.
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
01.08.2010, 22:02 #8
Конструктор по умолчанию ведет себя как пустой. А, согласно стандарту, члены-данные класса встроенных типов, если они явно не инициализированы в конструкторе, остаются неинициализированными.
0
Crudelis
Шаровик затейник
676 / 418 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
02.08.2010, 01:08 #9
Red Planet, из вашего первого кода вообще не понятно откуда берутся значения у i и j, в коде программы нигде не вызывается set. Какие там могут быть вообще значения при выводе на консоль... не понятно, возможно -8234234 что то в этом роде.
0
02.08.2010, 01:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2010, 01:08
Привет! Вот еще темы с ответами:

Доступ к закрытым элементам класса - Вопрос - C++
Доброго всем времени суток. Итак, столкнулся с одной непонятной вещью, связанной с классами, а точнее с private элементами. Вот код: ...

Вопрос про конструктор класса по умолчанию - C++
http://s2.ipicture.ru/uploads/20111029/A7AtbNYV.jpg Пункт первый не могу немного понять.Т.е получается,что всегда лучше создавать самому...

Построить описание класса (ошибки и вопрос) - C++
Это последнее задание из десяти. Я неспал и бошка совсем не варит. Пожалуйста помогите заочнику, а то сдача уже через 2 часа. Собственно...

Вычислить одномерный массив С, который содержит элементы, присутствующие в массивах А и В в одном экземпляре - C++
Дали задачку: Дано два одномерных массива целых чисел А и В. Вычислить одномерный массив С, который содержит элементы, присутствующие...


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

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

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