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

скрытый текст
#include "stdafx.h"
#include<iostream>
#include<cstdlib>
#include<fstream>
#include<time.h>
#include "LIST.h"
using namespace std;

//Копирующий конструктор
template<class Type>
LIST<Type>::LIST(LIST<Type> &o): begin(0),end(0),size(0){
    Node<Type> *p=o.get_begin();
    while(p){
        push_back(p->Value());
        p=p->Next();
    }
}
//Конструктор с параметрами 1
template<class Type>
LIST<Type>::LIST(float n, float min, float max): begin(0),end(0),size(0){
    srand( (unsigned)time( NULL ) );
    for(int i=0;i<n;i++) push_back(rand()%(max-min+1)+min);
}
//Конструктор с параметрами 2
template<class Type>
LIST<Type>::LIST(float n, float mode): begin(0),end(0),size(0){
    srand( (unsigned)time( NULL ) );
    for(int i=1;i<=n;i++)
        if(mode)
            push_pop(i);
        else
            push_back(i);
}
//Перегрузка оператора присваивания
template<class Type>
LIST<Type> & LIST<Type>::operator = (LIST<Type> &o) {
    Node<Type> *p=o.get_begin();
    while(p){
        push_back(p->Value());
        p=p->Next();
    }
    return *this;
}
//Перегрузка оператора сложения (Задание по варианту)
template<class Type>
LIST<Type> & LIST<Type>::operator + (LIST<Type> &o) {
    LIST<Type> *temp;
    Node<Type> *p=o.get_begin();
    while(p){
        if(searchByVal(p->Value())==0) temp->push_back(p->Value());
        p=p->Next();
    }
    return *temp;
}
//Поиск узла по индексу
template<class Type>
void LIST<Type>::fill() {
    Type p;
    while(!cin.eof()){
        cout<<">>";
        cin>>p;
        push_back(p);
    }
    delete_last();//Т.к добавился лишний элемент
    cin.clear();
}

//Добавление элемента в начало списка
template<class Type>
void LIST<Type>::push_pop(Type v){
    Node<Type> *p=new Node<Type>(v);
    if(!begin) {
        begin=end=p;
        p->Next()=0;
        p->Prev()=0;
    }
    else {
        p->Next()=begin;
        p->Prev()=0;
        begin->Prev()=p;
        begin=p;
    }
    size++;
}

//Добавление элемента в конец списка
template<class Type>
void LIST<Type>::push_back(Type v) {
    Node<Type> *p=new Node<Type>(v);
    if(!begin){
        begin=end=p;
        p->Next()=0;
        p->Prev()=0;
    }
    else {
        end->Next()=p;
        p->Prev()=end;
        p->Next()=0;
        end=p;
    }
    size++;
}
//Добавление элемента в заданную позицию
template<class Type>
void LIST<Type>::insert(int pos, Type v){
    if(pos<1||pos>size){
        cout<<"Выход за границы списка";
        return;
    }
    Node<Type> *pnew=new Node<Type>(v);
    if(size==0) {
        begin=end=pnew;
        pnew->Next()=0;
        pnew->Prev()=0;
    }
    else if(pos==1)
        push_pop(v);
    else if(pos==size)
        push_back(v);
    else
    {
        Node<Type> *p=begin,*p2;
        for(int i=2;i<=pos;i++)
            p=p->Next();
        p2=p->Next();
        p->Next()=pnew;
        p2->Prev()=pnew;
        pnew->Next()=p2;
        pnew->Prev()=p;
        size++;
    }
}

//Удаление элемента из начала списка
template<class Type>
void LIST<Type>::delete_first(){
    if(size==1){clear();return;}
    Node<Type>* p;
    if(begin){
        p=begin;
        begin=p->Next();
        begin->Prev()=0;
        size--;
        delete p;
    }
}
//Удаление элемента из конца списка
template<class Type>
void LIST<Type>::delete_last(){
    if(size==1){clear();return;}
    Node<Type>* p;
    if(end){
        p=end;
        end=p->Prev();
        end->Next()=0;
        size--;
        delete p;
    }
}
//Удаление элемента с позиции pos
template<class Type>
void LIST<Type>::delete_from(int pos){
    if(size==0||pos<1||pos>size){
        cout<<"Выход за границы списка";
        return;
    }
    if(pos==1)
        delete_first();
    else if(pos==size)
        delete_last();
    else
    {
        Node<Type> *p=begin,*p2;
        for(int i=2;i<=pos;i++)
            p=p->Next();
        //Будем удалять p узел
        p2=p; //Рабочая переменная
        p=p->Prev(); //Вторая рабочая переменная для хранения предыдущего узла
        p->Next()=p2->Next(); //Для предыдущего элемента следующим будет следующий элемент относительно удаляемоего
        (p2->Next())->Prev()=p; //А для следующего предыдущим будет предыдущий относительно удаляемоего
        size--;
        delete p2;
    }
}

//Вывод списка (по умолчанию - на экран)
template<class Type>
void LIST<Type>::print(ostream& os=cout) {
    Node<Type> *p;
    p=begin;
    if(!p)cout<<"Список пуст!";
    while(p){
        os<<p->Value()<<" ";
        p=p->Next();
    }
    cout<<endl;
}

template<class Type>
void LIST<Type>::printPlus(ostream& os=cout) {
    Node<Type> *p;
    float v=0;
    cout<<"Введите значение, на которое необходимо увеличить элементы списка:"<<endl;
    cin>>v;
    p=begin;
    if(!p)cout<<"Список пуст!";
    while(p){
        os<<p->Plus(v)<<" ";
        p=p->Next();
    }
    cout<<endl;
}

//Удаление всех элементов из списка
template<class Type>
void LIST<Type>::clear(){
    Node<Type> *p,*p1;
    if(begin){
        p=begin;
        while(p){
            p1=p->Next();
            delete p;
            p=p1;
        }
        begin=end=0;
        size=0;
    }
}

//Деструктор (Очищаем список)
template<class Type>
LIST<Type>::~LIST(){
    this->clear();
}

//Поиск узла по значению
template<class Type>
float LIST<Type>::searchByVal (Type s) {
    int count=0;
    Node<Type> *p=begin;
    while(p){
        if(p->Value()==s) count++;
        p=p->Next();
    }
    return count;
}
//Поиск узла по индексу
template<class Type>
float LIST<Type>::searchByIndex (int pos) {
    if(size==0||pos<1||pos>size){
        cout<<"Выход за границы списка"<<endl;
        return -1;
    }
    Node<Type> *p=begin;
    int i=0;
    while(++i<pos){
        p=p->Next();
    }
    return p->Value();
}

Изучение языка C++ вряд ли стоит начинать с подобных конструкций. Более того, каждая функция и так прокомментирована.

Начните с ввода-вывода, потом изучите массивы…
Затем переходите к классам, проникнитесь инкапсуляцией, наследованием и полиморфизмом. Попробуйте реализовать списки, очереди :)
Ну после этого можно уже переходить к графической среде навроде Visual Studio.
У них очень хорошая справка на MSDN.

Лучше при таких темпах изучения с Java начинать или C#...

littleleshy пишет

Ну после этого можно уже переходить к графической среде навроде Visual Studio.

При чём здесь Visual Studio? Студией можно пользоваться и на начальном этапе изучения ввода-вывода и массивов. А уж справкой MSDN и подавно.

Keepun пишет

попробуйте реализовать на них списки, очереди…Затем переходите к классам и проникнитесь инкапсуляцией, наследованием и полиморфизмом

Всё-таки списки и очереди реализуют обычно с помощью классов (как и приведено в самом первом сообщении в этой теме). Просто перед тем, как изучать классы, следует знать базовую часть языка C++ — ту, которая заимствована из C. Я имею в виду функции, операторы, работу с указателями и динамической памятью. Затем изучить структуры в смысле C. И уже после этого переходить к классам.

X Strange пишет

списки и очереди реализуют обычно с помощью классов

Ну да, точно:)

X Strange пишет

Студией можно пользоваться и на начальном этапе изучения

Можно-то оно можно, но зачем, когда чего нибудь типа C::B вполне хватит?

X Strange пишет

Изучение языка C++ вряд ли стоит начинать с подобных конструкций. Более того, каждая функция и так прокомментирована.

У меня времени нет анчинать сначала,перевелась вот на другую специальность,преподаватель понимает,поэтому сильно не спрашивает,надо ему не каждую функцию прокоментить а каждую строчку,а тут коментарии только к функции((

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

Ответ на вопрос отсюда:
http://forum.mozilla-russia.org/viewtop … 13#p635913

алина20 пишет

в чем отличие строки и символьного массива?

Строка --- это символьный массив, заканчивающийся символом с кодом 0. Например, строка "hello" --- это массив из 6-ти символов: 'h', 'e', 'l', 'l', 'o', '\0'.

Если речь идёт о, скажем, System::String, то это нечто большее, чем массив :)

littleleshy пишет

Если речь идёт о, скажем, System::String

В C++? И у тебя даже есть ссылка на стандарт, где такое написано? ;) Ну-ну...

PS: Перед тем как писать гневный ответ подумай хорошо о разнице между "в C++" и "в одной из библиотек, написанной на C++"

Кто-то сегодня пишет на чистом C++?
И гневным можно скорее Ваше сообщение назвать, а не моё :)

littleleshy пишет

Кто-то сегодня пишет на чистом C++?

Ты вообще вопрос прочитал или как обычно - просто поболтать пришел? ;)

Dzirt
Может быть, я что-то там написал не по теме?
Кстати, std::string — тоже не массив.

littleleshy пишет

Может быть, я что-то там написал не по теме?

Не по теме. И std::string - тоже не по теме. Вопрос был о C++ как языке. В котором нет встроенного типа "строка" и поэтому она всю жизнь была:

X Strange пишет

Строка --- это символьный массив, заканчивающийся символом с кодом 0. Например, строка "hello" --- это массив из 6-ти символов: 'h', 'e', 'l', 'l', 'o', '\0'.

А твои примеры System::String или std::string - это не строки в терминах языка C++, это объекты некоторых классов, которые для преобразования в строку символов в терминах C++ всегда имеют некоторую функцию, как в std::string например

    const char *c_str() { ... }

возвращающая указатель на тот самый массив символов, оканчивающийся нулем.

Dzirt пишет
littleleshy пишет

Может быть, я что-то там написал не по теме?

Не по теме. И std::string - тоже не по теме. Вопрос был о C++ как языке. В котором нет встроенного типа "строка" и поэтому она всю жизнь была:

X Strange пишет

Строка --- это символьный массив, заканчивающийся символом с кодом 0. Например, строка "hello" --- это массив из 6-ти символов: 'h', 'e', 'l', 'l', 'o', '\0'.

А твои примеры System::String или std::string - это не строки в терминах языка C++, это объекты некоторых классов, которые для преобразования в строку символов в терминах C++ всегда имеют некоторую функцию, как в std::string например

    const char *c_str() { ... }

возвращающая указатель на тот самый массив символов, оканчивающийся нулем.

На самом деле про std::string можно сказать, что он по теме, так как является частью стандарта C++ в отличие от System::String, CString, QString, и т.п.
Действительно, char *  --- это строка в стиле C, унаследованная языком C++. Однако я думаю, что вопрос был именно про char *, тем более, что строковая контанта "hello" --- это именно char * (точнее, const char *).

X Strange пишет

так как является частью стандарта C++ ...

Да. Но тем не менее, по прежнему встроенного типа "строка" нет. То, что теперь std фактически стандартная библиотека C++, не делает этот тип встроенным типом - это по прежнему объект определенного класса, реализованный в библиотеке.

И кроме того, ты же понимаешь, что вопрос "какая разница между std::string и символьным массивом" звучит несколько бредово? ;)

Dzirt пишет

И кроме того, ты же понимаешь, что вопрос "какая разница между std::string и символьным массивом" звучит несколько бредово?

Понимаю. Поэтому и ответил про char * :)

X Strange пишет

Понимаю. Поэтому и ответил про char *

Да, я видел эту часть ответа и полностью с ней согласен. Просто не придумал как еще отметить, что скорее всего именно это и имелось в виду, а не всякие std::string и иже с ним. :)

Dzirt пишет

это не строки в терминах языка C++

В терминах языка C++ вообще нет понятия «строка», раз на то пошло :)
«Ссылка», «указатель», «массив»… — есть.

littleleshy пишет

В терминах языка C++ вообще нет понятия «строка», раз на то пошло :)
«Ссылка», «указатель», «массив»… — есть.

И "строка" тоже есть. Нет встроенного типа "строка", это да. Но тем не менее, в терминах С++

X Strange пишет

Строка --- это символьный массив, заканчивающийся символом с кодом 0. Например, строка "hello" --- это массив из 6-ти символов: 'h', 'e', 'l', 'l', 'o', '\0'.