Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
programina
2050 / 605 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
1

Что не так с этим кодом?

19.02.2014, 14:46. Просмотров 899. Ответов 11
Метки нет (Все метки)

Что не так с этим кодом?
C++
#include <stdio.h>
 
struct Texture
{
    unsigned int tex;
 
    Texture() { tex = 0; }
};
 
int main()
{
    Texture texture;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2014, 14:46
Ответы с готовыми решениями:

что не так с кодом?
Только начал изучать программирование по книге Прата С. возникли проблемы с...

Что не так с кодом?
Задача из Прата: Выполните упражнение 4 из главы 9, но преобразуйте структуру...

Что не так с кодом
что не так? #include &lt;iostream.h&gt; #include &lt;fstream.h&gt; #include...

Что не так с кодом?
#include &lt;tchar.h&gt; #include &lt;math.h&gt; #include &lt;iostream.h&gt;...

Что не так с кодом?
Буду благодарен помощи. #include &lt;iostream&gt; #include &quot;stdio.h&quot; using...

11
Тамика
Котовчанин
919 / 463 / 195
Регистрация: 16.02.2010
Сообщений: 3,267
Записей в блоге: 32
19.02.2014, 14:48 2
А что с ним не так?
1
programina
2050 / 605 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
19.02.2014, 14:51  [ТС] 3
Цитата Сообщение от Тамика Посмотреть сообщение
А что с ним не так?
А Скот Маерс ругается на этот код.

Добавлено через 2 минуты
Вот что он пишет:
Цитата Сообщение от Scott Meyers
warning: ‘Texture::tex’ should be initialized in the member initialization list
Только не понятно почему от так считает.
0
Тамика
Котовчанин
919 / 463 / 195
Регистрация: 16.02.2010
Сообщений: 3,267
Записей в блоге: 32
19.02.2014, 14:52 4
Цитата Сообщение от programina Посмотреть сообщение
Texture(): tex(0){}
Да и неплохо бы сделать переменную tex приватной. А для получения tex - константную GetTex();
1
programina
2050 / 605 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
19.02.2014, 14:55  [ТС] 5
Цитата Сообщение от Тамика Посмотреть сообщение
Texture(): tex(0){}
Texture() { tex = 0; }
А какая между ними разница? ))
0
Тамика
Котовчанин
919 / 463 / 195
Регистрация: 16.02.2010
Сообщений: 3,267
Записей в блоге: 32
19.02.2014, 14:57 6
Переменна будет инициализирована до начала тела конструктора. Это не критично в данном случае. Но лучше делать так.
1
Ilot
Эксперт С++
1831 / 1189 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
19.02.2014, 14:59 7
Тошо не следует выполнять определение переменных внутри тела конструктора. Лучше пользоваться строкой инициализации.
Цитата Сообщение от programina Посмотреть сообщение
А какая между ними разница? ))
Дело в том, что строка инициализации вызывает конструкторы для соответствующих полей класса, а определение в теле конструктора вызывает оператор присваивания. Таким образом вы дважды определяете поля класса сперва конструкторами по умолчанию затем оператором присваивания.
1
programina
2050 / 605 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
19.02.2014, 15:07  [ТС] 8
Цитата Сообщение от Ilot Посмотреть сообщение
Тошо не следует выполнять определение переменных внутри тела конструктора
для чего же тогда нужен конструктор если не для инициализации переменных?

Вобщем Скот Маерс идет лесом, я отключаю его опцию -Weffc++.
0
Ilot
Эксперт С++
1831 / 1189 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
19.02.2014, 15:15 9
Цитата Сообщение от programina Посмотреть сообщение
для чего же тогда нужен конструктор если не для инициализации переменных?
Вы должно быть не до конца поняли. При определении полей класса в теле конструктора сперва будут созданны эти переменные конструкторами по умолчанию, а затем им будет присвоено значение из тела конструктора. Если пользоваться строкой инициализации то для полей класса будут вызванны соответствующие конструкторы которые создадут переменные полей класса.
Попробуйте запустить два констуктора для В:
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
#include<iostream>
using namespace std;
class A {
    int a;
public:
    A(): a()
    {
        cout << "Конструктор по умолчанию A()\n";
    }
    A(int _a): a(_a)
    {
        cout << "Конструктор A(int a)\n";
    }
    A& operator= (A& _a)
    {
        a = _a.a;
        cout << "Оператор присваения\n";
        return *this;
    }
};
class B
{
    A a_in_B;
public:
    B(A a)
    {
        a_in_B = a;
    }
    //B(A a): a_in_B(a) {}
};
int main() {
    system("chcp 1251>0");
    A a(10);
    B b(a);
    system("pause");
    return 0;
}
1
Тамика
Котовчанин
919 / 463 / 195
Регистрация: 16.02.2010
Сообщений: 3,267
Записей в блоге: 32
19.02.2014, 15:31 10
Таким образом вы дважды определяете поля класса сперва конструкторами по умолчанию затем оператором присваивания.
будут созданны эти переменные конструкторами по умолчанию
В данном случае поле tex встроенного типа в отсутствии списка инициализации инициализировано не будет (в отличии от пользовательских классов) и будет иметь неопределённое значение. По этому здесь оба случая (список инициализации или тело конструктора) полностью эквивалентны.
1
DrOffset
8158 / 4734 / 1159
Регистрация: 30.01.2014
Сообщений: 7,714
19.02.2014, 16:44 11
Цитата Сообщение от programina Посмотреть сообщение
Вобщем Скот Маерс идет лесом, я отключаю его опцию -Weffc++.
Лучше почитать его книжки перед тем, как включать эту опцию
1
HighPredator
5681 / 2003 / 720
Регистрация: 10.12.2010
Сообщений: 5,761
Записей в блоге: 3
19.02.2014, 16:51 12
Лучший ответ Сообщение было отмечено programina как решение

Решение

Цитата Сообщение от programina Посмотреть сообщение
Только не понятно почему от так считает.
Это результат неверного исполнения гайдлайна из Effective C++. Конкретно, это баг №16166 компилятора GCC http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16166#c3
1
19.02.2014, 16:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2014, 16:51

Подскажите что не так с кодом?
#include &lt;iostream&gt; #include &lt;math.h&gt; int main() { int matrix; int...

Не пойму что не так с кодом
Вроде бы всё верно... #include&lt;iostream&gt; #include&lt;conio.h&gt;...

Подскажите,пожалуйста ,что не так с кодом!
Не могу понять,что с кодом.Если не сложно,то прокомментируйте пожалуйста ...


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

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

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