13 / 2 / 2
Регистрация: 17.10.2012
Сообщений: 57
1

Теория С++ (профан)

27.02.2015, 23:09. Показов 1906. Ответов 32
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!
Такая вот ситуация: начался семестр и стали объяснять С++(три года гоняли просто по Си), преподаватель сам прямо сказал, что не очень понимает этот язык. Но программу пройти надо. Мне хочется не просто прогать по шаблону,но и понимать,что там вообще творится. Поэтому вопроса два:
1)Какую литературу+ практикум посоветуете или сайты по поводу ООП с использованием С++?
2) Может кто-нибудь объяснить различие между struct и class? Как struct переделать в class с минимум изменений?
Всем заранее огромное спасибо!
Удачного вам дня,
С уважением Lokomoss
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2015, 23:09
Ответы с готовыми решениями:

Двусвязный список (профан)
Всем снова добрый вечер! Итак суть такова: есть двусвязный список непонятной информации(но это...

Профан не может обновить сборку
мать: ASUS M4A87TD/USB3 Xtreme Design проц: AMD Phenom 2 X4 955 3/21GHz Видяха: NVIDIA GeForse...

Народ помогите найти ошибку в коде, почему он не работает я в этом профан просто
Так что ты колотишся так рано? Времени ещё вагон!!!

Теория принятия решений Теория игр
Команды факультетов A и B определяют свои стратегии игры в первенстве университета по баскетболу....

32
205 / 181 / 112
Регистрация: 15.03.2014
Сообщений: 392
28.02.2015, 13:57 21
Author24 — интернет-сервис помощи студентам
gru74ik, в этот раз я не успел за стандартами уследить
0
1352 / 851 / 365
Регистрация: 26.02.2015
Сообщений: 3,799
28.02.2015, 14:03 22
Ребята, а как вам книга Р. Лафоре "Объектно-ориентированное программирование в C++"? Чем она хуже или лучше относительно остальных книг, перечисленных тут?
0
205 / 181 / 112
Регистрация: 15.03.2014
Сообщений: 392
28.02.2015, 14:12 23
Nishen, отличная книга, читал ее года 3-4 назад. Но я не видел издания данной книги, где описывается новый стандарт c++.
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
28.02.2015, 15:12 24
Цитата Сообщение от Lokomoss Посмотреть сообщение
Может кто-нибудь объяснить различие между struct и class? Как struct переделать в class с минимум изменений?
1)сходство: структура и класс описывают переменную(объект) со значениями разных типов(свойства);
2)различия: класс предоставляет ещё дополнительно методы для работы со свойствами этого объекта, при использовании структур каждое обращение к любой переменной прописывается прямо в текущем коде, в классах методы прописываются один раз при его определении. Свойства и методы могут быть: общие(public), скрытые(private) и наследуемые(protected). Для начала думаю Вам достаточно, если всё будет определено как общие.
Удачи в изучении языка!
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
28.02.2015, 15:44 25
Constantin Cat, в С++ разницы никакой, кроме того, что у структур поля по умолчанию public, а у классов private. Как структуры, так и классы могут иметь методы, наследоваться и т.п. Использование в С++ структур для POD-данных - просто дань традиции.

Добавлено через 6 минут
Когда автор увидит как класс наследуется от структуры, его мир уже никогда не будет прежним.
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
28.02.2015, 16:00 26
gru74ik,
Цитата Сообщение от Lokomoss Посмотреть сообщение
С++(три года гоняли просто по Си)
Наскольо я понял, ему нужно переход от структур С к классам С++.
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
28.02.2015, 16:09 27
Цитата Сообщение от Constantin Cat Посмотреть сообщение
переход от структур С к классам С++
Понял, благодарю. Невнимательно прочитал.
0
13 / 2 / 2
Регистрация: 17.10.2012
Сообщений: 57
28.02.2015, 21:33  [ТС] 28
Ну сначала просто давали странные задачи - реализация strcpy,например, определение удачной позиции в шахматах для обхода конем, всякие сортировки простые, затем год программирование физических и математических моделей, потом год программирование под системой Unix,реализации интернет сетей, нитей, написание клиента и сервера с обработкой демонов и т.п. А если насчет литературы я читала Фомина просто, ну и статьи. Потом полгода реализация всяких списков, графов и тп. Простейшие кодировки.Такой ответ устраивает всех? Или подробнее объяснить?
Надо учитывать,что мы пришли и никто по сути не говорил нам,как и что делать. Каждый учился сам.Давали задачи,а то как ты их сдашь- никого не волнует. При этом очень сильные и хорошие преподаватели,просто не для новичков.

Добавлено через 4 минуты
Constantin Cat, Во-первых, ей) Хаха
А, во-вторых, просто увидела программу,реализующая то,что мне нужно,но через структуру, захотел быстро узнать,в чем разница. Ну тут задала вопрос, параллельно полезла в книги. Все-таки у каждого свое видение, и не все книги я смогу понять. А возможно, что тут кто-то более доступно объяснит этот вопрос
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,511
28.02.2015, 21:33 29
Цитата Сообщение от Constantin Cat Посмотреть сообщение
нужно переход от структур С к классам С++.
тогда про typedef не сказал?
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
28.02.2015, 21:59 30
Lokomoss,
Цитата Сообщение от Lokomoss Посмотреть сообщение
просто увидела программу,реализующая то,что мне нужно,но через структуру, захотел быстро узнать,в чем разница
Что именно Вы увидели? Покажите код.
0
13 / 2 / 2
Регистрация: 17.10.2012
Сообщений: 57
28.02.2015, 22:58  [ТС] 31
Constantin Cat,
C++ (Qt)
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
using namespace std;
//Описание узла списка.
 
struct Node {
int d;
Node *next;
Node *prev;
Node():next(NULL),prev(NULL), d(-332215){}
Node(Node* ptr_n, Node *ptr_p , int data): next(ptr_n),prev(ptr_p), d(data) {}
};
 
 
//Функции для работы со списком.
//--------------------------------------------------------
Node * Create(int data);                 //создает список.
int add(Node**const pend , int data);    //добавить в конец списка.
int pop(Node**const pbeg);               //выборка  из начала списка.
 
//полная выборка.  
void Update(Node **const pbeg, Node** const pend ){ while(*pbeg)pop(pbeg); (*pend)=NULL; }       
 
void ShowE(Node *pend);                  //показать с конца.
void ShowB(Node *pbeg);                  //показать с начала.
/*выводит в зависимости от того: какой указатель передан: на конец или начало. для кольцевых не работает. */
void Show(Node *ptr); 
//--------------------------------------------------------
int main(){
 
Node *pbeg = NULL;     //на начало списка.
Node *pend = NULL;     //на конец  списка.
int numb; 
cout<<"Input numb\t"; cin>>numb;
pend = Create(numb);    //создаем   список.
pbeg = pend;
 
int i = 0;
while(i<10){ 
cout<<"Input numb\t"; cin>>numb;
add(&pend,numb);
i++;
}
Show(pend);
Show(pbeg);
Update(&pbeg,&pend);
return 0;
}
//создает список.
Node * Create(int data){ Node *pv = new Node(NULL,NULL,data); ; return pv; }
 
//добавить в конец списка.
int add(Node**const pend , int data){
Node *pv = new Node(NULL,*pend,data);
(*pend)->next = pv; 
(*pend) = pv;
return 0;
}
 
//выборка  из начала списка.
int pop(Node**const pbeg){
Node *tmp = (*pbeg);
if(tmp){
int d = tmp->d;
(*pbeg)=(*pbeg)->next;
delete tmp;
return d;
}
return -1;
}
 
//показать с конца.
void ShowE(Node *pend){ while(pend){    cout<<pend->d<<' '; pend = pend->prev;   } cout<<endl;     }
//показать с начала.
void ShowB(Node *pbeg){ while(pbeg){    cout<<pbeg->d<<' '; pbeg = pbeg->next;   } cout<<endl;     }    
 
/*выводить в зависимости от того: какой указатель передан: на конец или начало. для кольцевых не работает. */
void Show(Node *ptr){
if(ptr){
if((ptr->next==NULL)&&(ptr->prev==NULL))  {while(ptr){  cout<<ptr->d<<' '; ptr=ptr->prev;   } cout<<endl; return; }
//Выводим список с конца. если:
if((ptr->next == NULL)&&(ptr->prev!=NULL)){     while(ptr){     cout<<ptr->d<<' '; ptr=ptr->prev;   } cout<<endl; return; }
//Выводим сначала если
if((ptr->next != NULL)&&(ptr->prev==NULL)){     while(ptr){     cout<<ptr->d<<' '; ptr=ptr->next;   } cout<<endl; return; }
return ;
}
 
}
Добавлено через 1 минуту
Constantin Cat, если более точнее, мне нужно создать двусвязный список. Динамически, с использованием this.Но при этом класс должен состоять из любого количества элементов. Тк информация строки, то ввод производится до пустой строки.Я вот сейчас пытаюсь реализовать это сама. Если можно,то хотела бы показать код, чтобы указали на ошибки и тп, мб что получше подскажете сделать.а может и почитать где

Добавлено через 22 минуты
Двусвязный список (профан)
Вот мой пост уже с написанной моей прогой, неудачной, к сожалению( Буду рыскать пока в книгах,авось найду причины. Но если кто поможет, буду премного благодарна.А если объяснят-вдвойне
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,511
28.02.2015, 23:10 32
Цитата Сообщение от Lokomoss Посмотреть сообщение
Динамически, с использованием this.
объясни что ты имеешь ввиду
дело в том что this это адрес текущего объекта
например
C++
1
2
3
4
5
6
7
8
9
10
11
struct A
{
void prnt(){printf("%u",this);};
}
 
A a;
A b;
A c;
a. prnt();// выведет адрес по которому лежит a
b. prnt();// выведет адрес по которому лежит b
c. prnt();// выведет адрес по которому лежит c
0
13 / 2 / 2
Регистрация: 17.10.2012
Сообщений: 57
28.02.2015, 23:21  [ТС] 33
ValeryS,
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <cstring>
#include <cstdio> //для gets
 
 
using namespace std;
 
class NODE{ 
 
    static NODE*head;
    NODE *next;
    NODE *prev;
    char info[10];
    public:
    void Add_inform(char *s);
    void Add_NODE();
    void Display_All();
};
NODE* NODE::head=NULL;
 
void NODE::Add_NODE(){
    if(head == NULL){
    head=this;
    next=NULL;
    prev=NULL;
    }else{
        next=head;
        head=this;
        next->prev=this;
        prev=NULL;
    }
}
 
void NODE::Add_inform(char *s){
    strcpy(info,s);
    next->prev=NULL;
}
 
void NODE::Display_All(){
    NODE *p=head;
    while(p!=this){
    cout<<p->info<<'\n';
    }
}
 
int main(){
    char buf[50];
    NODE *pv;
    while(*gets(buf)!='\0'){
        pv=new NODE;
        pv.Add_inform(buf); 
        pv.Add_NODE();
    }
    pv.Display_All();
    return 0;
}
Вот программа. Все кроме main написал преподаватель. Просто надо использовать индекс,который бегает по списку. Как я поняла this явный указатель выполняет эту роль.Хотя по сути он тут нафиг не сдался
0
28.02.2015, 23:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2015, 23:21
Помогаю со студенческими работами здесь

теория
народ мож кто знает где можно найти теорию или что-нибудь на подобии пособия,там где описывается...

Теория ОС
Типа курилка. Сам уже давно забил на написание ОС под x86-64, ввиду трудоемкой настройки - трудно...

Теория
Поясните мне, есл можете, что значит Описание используемых структур данных. в графе. P S оформляю...

Теория по С++
Помогите с вопросами по экзамену по файлам 10) Беззнаковые типы данных. 23) Объявление...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru