Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2011, 13:44   #1
wwe2012
Пользователь
 
Аватар для wwe2012
 
Регистрация: 17.01.2011
Сообщений: 51
Вопрос Как создать конструктор с параметрами по умолчанию

Как создать конструктор с параметрами по умолчанию в этом коде:

Код:
#include <iostream>
#include <conio.h>
using namespace std;
class CMyStack
{
friend int GetTopNodeD(CMyStack* myStack);
public:
CMyStack();
CMyStack(const CMyStack &); // конструктор копирования
~CMyStack();
void Push(int d);
int Pop();
bool isEmpty();
void Print();

CMyStack& operator +(int d);

private:
struct Node
{
int d;
Node *p;
};

Node *top;
};

CMyStack& CMyStack:perator +(int d)
{
Push(d);
return *this;
}

int GetTopNodeD(CMyStack* myStack)
{
if (myStack->top != NULL)
{
return myStack->top->d;
}

return -1;
}

CMyStack::CMyStack():top(NULL)
{

}

void CMyStack::Push(int d)
{
Node *pv = new Node;
pv->d = d;
pv->p = top;
top = pv;
}

CMyStack :: CMyStack(const CMyStack &rhs)
{
    d=new int;
    p=new Node;
    *d=rhs.Getd();
    *p=*(rhs.p);     
         
         
         }

int CMyStack::Pop()
{
if (isEmpty())
{
return -1;
}
int temp = top->d;
Node *pv = top;
top = top->p;
delete pv;
return temp;
}


bool CMyStack::isEmpty()
{
return top ? false : true;
}

void CMyStack::Print()
{
while (top)
{
std::cout << Pop() << ' ';
}

std::cout << std::endl;
}

CMyStack::~CMyStack()
{
while (top)
{
Node *pv = top;
top = top->p;
delete pv;
}

}

int _tmain(int argc, _TCHAR* argv[])
{
CMyStack lolo;

lolo + 2 + 3 + 4;

std::cout << GetTopNodeD(&lolo) << std::endl;

lolo.Print();
getch();
return 0;
}
ребята глянити почемуто у меня не работает конструктор копирования. компилятор ощибку выдает.
wwe2012 вне форума Ответить с цитированием
Старый 29.03.2011, 14:03   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Параметр по умолчанию: например перегрузить его
psycho-coder вне форума Ответить с цитированием
Старый 29.03.2011, 14:17   #3
wwe2012
Пользователь
 
Аватар для wwe2012
 
Регистрация: 17.01.2011
Сообщений: 51
Вопрос

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
Параметр по умолчанию: например перегрузить его
а можно более подробно просто я самоучкак не очень получаеться, а незнаеш чего конструктор копирования выдает ощибку
wwe2012 вне форума Ответить с цитированием
Старый 29.03.2011, 14:28   #4
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

wwe2012, вы сами определитесь, что вам нужно! Конструктор, в котором параметры заданы по умолчанию или копирующий конструктор? Две разные вещи. У вас ничего не получается именно из-за того, что вы не знаете, что вам нужно.
_-Re@l-_ вне форума Ответить с цитированием
Старый 29.03.2011, 14:38   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Код:
#include <iostream>
#include <conio.h>

using namespace std;

struct Node
{
     int d;
    Node *p;
};

class CMyStack
{
     friend int GetTopNodeD(CMyStack* myStack);
     public:
        CMyStack() : top(NULL) { }
        CMyStack(const CMyStack &rhs)
        {
             d=new int;
             p=new Node;
           *d=rhs.Getd();
           *p=*(rhs.p);     
        }
        ~CMyStack()
        {
             while (top)
             {
                   Node *pv = top;
                   top = top->p;
                   delete pv;
             }
        }
        void Push(int d);

        int Pop();

        bool isEmpty();

        void Print();

        CMyStack& CMyStack:operator +(int d)
        {
              Push(d);
              return *this;
        }
     private:
        Node* top;
};


int GetTopNodeD(CMyStack* myStack)
{
      if (myStack->top != NULL)  
      return myStack->top->d;
      else return -1;
}


void CMyStack::Push(int d)
{
       Node *pv = new Node;
       pv->d = d;
       pv->p = top;
       top = pv;
}


int CMyStack::Pop()
{
         if (isEmpty())
         {
              return -1;
         }
         int temp = top->d;
         Node *pv = top;
         top = top->p;
         delete pv;
         return temp;
}


bool CMyStack::isEmpty()
{
      return top ? false : true;
}

void CMyStack::Print()
{
        while (top)
        {
            cout << Pop() << ' ';
        }
       cout << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
        CMyStack lolo;
        lolo = lolo+2+3+4;
        cout << GetTopNodeD(&lolo) << endl;
        lolo.Print();
        getch();
        return 0;
}

Ну, немного поправил. На логику не проверял - времени нет.
И ещё меня удивила загадочная строка:
Код:
 lolo+2+3+4; // Это ещё что??
Конечно, в приведённом мною коде могут быть ошибки - не знаю, не проверял.
_-Re@l-_ вне форума Ответить с цитированием
Старый 29.03.2011, 14:41   #6
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Подробней? Хм...

Есть конструктор некоторого класса MyClass
Код:
class MyClass
{
  private:
    int FInt;
  public:
    MyClass() {};
}
MyClass::MyClass() { FInt = 0; };
С пустыми параметрами - это будет с параметром по умолчанию.

Но если перегрузить конструктор, то можно получить и с передаваемыми параметрами.
Код:
class MyClass
{
  private:
    int FInt;
  public:
    MyClass() {};
    MyClass(int AInt) {};
}
MyClass::MyClass() { FInt = 0; };
MyClass::MyClass(int AInt) { if (AInt != FInt) FInt = AInt; };
Это просто пример, без смысловой нагрузки. Смысл думаю понятен
psycho-coder вне форума Ответить с цитированием
Старый 29.03.2011, 18:22   #7
wwe2012
Пользователь
 
Аватар для wwe2012
 
Регистрация: 17.01.2011
Сообщений: 51
По умолчанию

это перегрузкак опертора +. я так думая что бы перегрузить опертор надо что бы он был воше
wwe2012 вне форума Ответить с цитированием
Старый 29.03.2011, 18:22   #8
wwe2012
Пользователь
 
Аватар для wwe2012
 
Регистрация: 17.01.2011
Сообщений: 51
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Код:
#include <iostream>
#include <conio.h>

using namespace std;

struct Node
{
     int d;
    Node *p;
};

class CMyStack
{
     friend int GetTopNodeD(CMyStack* myStack);
     public:
        CMyStack() : top(NULL) { }
        CMyStack(const CMyStack &rhs)
        {
             d=new int;
             p=new Node;
           *d=rhs.Getd();
           *p=*(rhs.p);     
        }
        ~CMyStack()
        {
             while (top)
             {
                   Node *pv = top;
                   top = top->p;
                   delete pv;
             }
        }
        void Push(int d);

        int Pop();

        bool isEmpty();

        void Print();

        CMyStack& CMyStack:operator +(int d)
        {
              Push(d);
              return *this;
        }
     private:
        Node* top;
};


int GetTopNodeD(CMyStack* myStack)
{
      if (myStack->top != NULL)  
      return myStack->top->d;
      else return -1;
}


void CMyStack::Push(int d)
{
       Node *pv = new Node;
       pv->d = d;
       pv->p = top;
       top = pv;
}


int CMyStack::Pop()
{
         if (isEmpty())
         {
              return -1;
         }
         int temp = top->d;
         Node *pv = top;
         top = top->p;
         delete pv;
         return temp;
}


bool CMyStack::isEmpty()
{
      return top ? false : true;
}

void CMyStack::Print()
{
        while (top)
        {
            cout << Pop() << ' ';
        }
       cout << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
        CMyStack lolo;
        lolo = lolo+2+3+4;
        cout << GetTopNodeD(&lolo) << endl;
        lolo.Print();
        getch();
        return 0;
}

Ну, немного поправил. На логику не проверял - времени нет.
И ещё меня удивила загадочная строка:
Код:
 lolo+2+3+4; // Это ещё что??
Конечно, в приведённом мною коде могут быть ошибки - не знаю, не проверял.
это перегрузкак опертора +. я так думая что бы перегрузить опертор надо что бы он был воше
wwe2012 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа с типизированными параметрами-значениями и параметрами-переменными Kira09 Паскаль, Turbo Pascal, PascalABC.NET 1 20.12.2010 22:23
Конструктор по умолчанию. Jane-sad Помощь студентам 1 23.11.2010 11:52
Определить конструктор для инициализации полей по умолчанию ArtiSoft Общие вопросы C/C++ 10 20.12.2009 18:42
Конструктор по умолчанию Rembo Общие вопросы C/C++ 9 30.07.2008 09:54