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

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

Войти
Регистрация
Восстановить пароль
 
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
#1

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

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

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

что не так с кодом? - C++
Только начал изучать программирование по книге Прата С. возникли проблемы с упражнениями в конце второй главы, а именно с 5: Напишите...

Что не так с кодом - C++
что не так? #include &lt;iostream.h&gt; #include &lt;fstream.h&gt; #include &lt;windows.h&gt; #include &quot;F.h&quot;

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

Подскажите что не так с кодом? - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; int main() { int matrix; int A={0,1,2,3,4}; int n=5; for(int j=0; j&lt;n;...

Подскажите,пожалуйста ,что не так с кодом! - C++
Не могу понять,что с кодом.Если не сложно,то прокомментируйте пожалуйста #include &lt;stdio.h&gt; #include &lt;string.h&gt; #define ...

Что не так с приведённым ниже кодом? - C++
Что не так с приведённым ниже кодом? for(int i = 0; i &lt; n; i++){ k = s.find('*'); t = s.rfind('*'); }

Что не так с кодом? Компилируется, но не работает (связные списки) - C++
#include &quot;stdio.h&quot; #include &quot;stdlib.h&quot; #include &lt;string.h&gt; #include &quot;iostream&quot; using namespace std; class Elem { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,954
Записей в блоге: 27
19.02.2014, 14:48     Что не так с этим кодом? #2
А что с ним не так?
programina
1914 / 599 / 37
Регистрация: 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
Только не понятно почему от так считает.
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,954
Записей в блоге: 27
19.02.2014, 14:52     Что не так с этим кодом? #4
Цитата Сообщение от programina Посмотреть сообщение
Texture(): tex(0){}
Да и неплохо бы сделать переменную tex приватной. А для получения tex - константную GetTex();
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
19.02.2014, 14:55  [ТС]     Что не так с этим кодом? #5
Цитата Сообщение от Тамика Посмотреть сообщение
Texture(): tex(0){}
Texture() { tex = 0; }
А какая между ними разница? ))
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,954
Записей в блоге: 27
19.02.2014, 14:57     Что не так с этим кодом? #6
Переменна будет инициализирована до начала тела конструктора. Это не критично в данном случае. Но лучше делать так.
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
19.02.2014, 14:59     Что не так с этим кодом? #7
Тошо не следует выполнять определение переменных внутри тела конструктора. Лучше пользоваться строкой инициализации.
Цитата Сообщение от programina Посмотреть сообщение
А какая между ними разница? ))
Дело в том, что строка инициализации вызывает конструкторы для соответствующих полей класса, а определение в теле конструктора вызывает оператор присваивания. Таким образом вы дважды определяете поля класса сперва конструкторами по умолчанию затем оператором присваивания.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
19.02.2014, 15:07  [ТС]     Что не так с этим кодом? #8
Цитата Сообщение от Ilot Посмотреть сообщение
Тошо не следует выполнять определение переменных внутри тела конструктора
для чего же тогда нужен конструктор если не для инициализации переменных?

Вобщем Скот Маерс идет лесом, я отключаю его опцию -Weffc++.
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 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;
}
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,954
Записей в блоге: 27
19.02.2014, 15:31     Что не так с этим кодом? #10
Таким образом вы дважды определяете поля класса сперва конструкторами по умолчанию затем оператором присваивания.
будут созданны эти переменные конструкторами по умолчанию
В данном случае поле tex встроенного типа в отсутствии списка инициализации инициализировано не будет (в отличии от пользовательских классов) и будет иметь неопределённое значение. По этому здесь оба случая (список инициализации или тело конструктора) полностью эквивалентны.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
19.02.2014, 16:44     Что не так с этим кодом? #11
Цитата Сообщение от programina Посмотреть сообщение
Вобщем Скот Маерс идет лесом, я отключаю его опцию -Weffc++.
Лучше почитать его книжки перед тем, как включать эту опцию
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2014, 16:51     Что не так с этим кодом?
Еще ссылки по теме:

С моим кодом что-то не так! на калькуляторе одно число,а в программе другое( - C++
вот код программы,я только учусь,через неделю олимпиаду писать, так что выручайте)) #include &lt;iostream&gt; #include &lt;cstdlib&gt; using...

подскажите что с кодом не так? (просуммировать два раза по два столбца, функция) - C++
Нужно создать функцию для суммирования двух столбцов и просуммировать два раза по два столбца. Сам массив задала, а функция работает не...

прошу проверить на правильность if ! ) так же прикрепил файл с блок -схемой и кодом - C++
ln|x| при sinx+cos2x при z= x*x*x+1 при x+1/x*x+8 при ln x в остальных случаях ...

Что делает компилятор с этим? - C++
Здравствуйте, такой вопрос: что делает компилятор с операторами типа: int x; 15.5f; 3, 'c'; &quot;stroka&quot;, x; он их просто...

Подскажите что с этим делать на С++ - C++
Помогите с написанием задач на С++ пожалуйста: 1. Написать программу, которая вычисляет среднее арифметическое ненулевых элементов...


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

Или воспользуйтесь поиском по форуму:
HighPredator
5474 / 1840 / 342
Регистрация: 10.12.2010
Сообщений: 5,431
Записей в блоге: 3
19.02.2014, 16:51     Что не так с этим кодом? #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от programina Посмотреть сообщение
Только не понятно почему от так считает.
Это результат неверного исполнения гайдлайна из Effective C++. Конкретно, это баг №16166 компилятора GCC http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16166#c3
Yandex
Объявления
19.02.2014, 16:51     Что не так с этим кодом?
Ответ Создать тему
Опции темы

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