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

class List - C++

Восстановить пароль Регистрация
 
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
19.04.2013, 03:03     class List #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class List
{
private:
    struct LStruct
    {
        LStruct *m_pNext;
        int info;
    };
    LStruct *m_pHead;
public:
    List();//что это делает?
    ~List();// что это делает?
 
                LStruct *p = m_pHead;// 1
        LStruct p1 = *m_pHead;  //2
        p1.m_pNext;  //3
        p->m_pNext;  //4
//
В чем отличие 1 и 4 от 2 и 3 ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2013, 03:03     class List
Посмотрите здесь:

Ошибки: 1) use of class template requires template argument list 2) 'T' : undeclared identifier C++
C++ Нужно объект типа класс проинициализировать с помощью перегруженного конструктора Class::Class( bool a )
enum и class как составляющие другого class C++
Разъясните код пжлст(выдает ошибку:cannot convert from 'class std::list<class c_bullet *,class std::allocator<class c_bullet *> >::iterator' to 'int') C++
Работа с class ами. Заполнение дин. массива типа class C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.04.2013, 03:09     class List #2
Цитата Сообщение от Xsenon_rus Посмотреть сообщение
List();//что это делает?
инициализирует...что-то

Цитата Сообщение от Xsenon_rus Посмотреть сообщение
~List();// что это делает?
деинициализирует...что-то

в 1 копируем лишь указатель. размер указателя 4 байта на 32-х битных платформах.
в 2 копируем сам объект расположенный по указателю. размер вашего объекта 8 байт тоже на 32-х битных платформах.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
19.04.2013, 03:15     class List #3
Думаю код поможет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
struct Foo
{
    int x;
};
 
int main()
{
    Foo *f1, *f2, f3;
    f1->x = 1;
    f2 = f1;
    f3 = *f1;
    std::cout << f1->x << " " << f2->x << " " << f3.x << std::endl;
    f1->x = 2;
    std::cout << f1->x << " " << f2->x << " " << f3.x << std::endl;
}
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
19.04.2013, 03:19  [ТС]     class List #4
Ок, а как вы думаете что он может инициализировать, а потом сразу же деин. ?

Добавлено через 1 минуту
Цитата Сообщение от MrGluck Посмотреть сообщение
Думаю код поможет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
struct Foo
{
    int x;
};
 
int main()
{
    Foo *f1, *f2, f3;
    f1->x = 1;
    f2 = f1;
    f3 = *f1;
    std::cout << f1->x << " " << f2->x << " " << f3.x << std::endl;
    f1->x = 2;
    std::cout << f1->x << " " << f2->x << " " << f3.x << std::endl;
}
Я так понял он должен выводить одно и то же ?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
19.04.2013, 03:21     class List #5
Цитата Сообщение от Xsenon_rus Посмотреть сообщение
Я так понял он должен выводить одно и то же ?
никому он не должен. В первом случае идет копирование указателя (т.е. f2 ссылается на тот же участок памяти, что и f1), во втором по разыменованному указателю, т.е. по значению.
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
19.04.2013, 03:28  [ТС]     class List #6
Я имел в виду здесь:

std::cout << f1->x << " " << f2->x << " " << f3.x << std::endl;
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
19.04.2013, 03:31     class List #7
Xsenon_rus, ваше "здесь" фигурирует в моем примере дважды.
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
19.04.2013, 03:35  [ТС]     class List #8
Спасибо дважды за помощь =), но с инициализацией я так и не понял ...

Следующий файл содержит ещё токи строки
C++
1
2
3
4
5
6
7
8
9
10
11
List::List()    // конструктор
{
        List::m_pHead = NULL;
}
 
List::~List()   // деструктор
{
    List::ClearList();
    delete m_pHead;
 
}
Может это как то относиться к моему 1 вопросу ...
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
19.04.2013, 03:41     class List #9
Цитата Сообщение от Xsenon_rus Посмотреть сообщение
но с инициализацией я так и не понял ...
Почитайте про предназначения конструкторов и деструкторов. Первый вызывается при создании объекта, соотв. создает ресурсы и, возможно (желательно) инициализирует их начальным значением, второй эти ресурсы освобождает.

Добавлено через 1 минуту
В вашем примере в конструкторе член m_pHead инициализируется начальным значением NULL, в деструкторе происходит вызов метода ClearList(), затем происходит освобождение памяти, выделенной указателю m_pHead.
Xsenon_rus
8 / 8 / 0
Регистрация: 18.04.2011
Сообщений: 104
19.04.2013, 03:43  [ТС]     class List #10
Спасибо за помощь. Очень признателен что в столь поздний час, нашлись люди которые мне помогли.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2013, 06:38     class List
Еще ссылки по теме:

vector<[class]> in class и перегрузка (ostream) C++
C++ Create a programm that creates an object of created class Time and tests the member functions of class
'MyQueue' : use of class template requires template argument list C++

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

Или воспользуйтесь поиском по форуму:
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
19.04.2013, 06:38     class List #11
Цитата Сообщение от MrGluck Посмотреть сообщение
Думаю код поможет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
struct Foo
{
    int x;
};
 
int main()
{
    Foo *f1, *f2, f3;
    f1->x = 1;
    f2 = f1;
    f3 = *f1;
    std::cout << f1->x << " " << f2->x << " " << f3.x << std::endl;
    f1->x = 2;
    std::cout << f1->x << " " << f2->x << " " << f3.x << std::endl;
}
Не сочтите, что я придираюсь, но у вас на 11 строчке уже undefined behavior.
Yandex
Объявления
19.04.2013, 06:38     class List
Ответ Создать тему
Опции темы

Текущее время: 20:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru