Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/14: Рейтинг темы: голосов - 14, средняя оценка - 4.50
1

конструкторы

28.09.2007, 00:57. Показов 2507. Ответов 2
Метки нет (Все метки)

Здравствуйте! Давеча по учебе пришлось мне столкнуться с конструкторами. В качестве примера
мне дали код, приведенный ниже, написано там было слишом уж неразборчиво, теперь вот мучаюсь.
Главный мой вопрос - может ли все ниже приведенное относиться к одному классу и вообще к одной
проге? При компиляции в одном файле, выдается большое количество ошибок непонятного содержания.

И еще вопросик: 40-я строка. memory-это что? просто имя чего-то или какой-то оператор?Возможно,
что это слово вообще не memory, а какое-то схожее по написанию?!!!
(Почерк у нашего препода-не дай Боже)

Код
	class stack { 
  private : enum {empty = -1};
char *s ;  
int max_len, top;
  public:
	stack (); // îíñòðóêòîðû ïî óìîë÷àíèþ
	stack (int size) { s=new char [size]; // êîíñòðóêòîð ñ îäíèì ïàðàìåòðîì
	max_len = size; top=empty; }
	stack (int size, const char str []); //êîíñòðóêòîð ñ äâóìÿ ïàðàìåòðàìè 
	stack (const stack &s); // êîíñòðóêòîð êîïèðîâàíèÿ     ///10 ÑÒÐÎÊÀ/////
	 ~ stack { delete [] s;}  //äåñòðóêòîð


	void reset () {top=empty;}
	void push (char c); char pop ();
	char top_of () const;
	boolean empty () const;
	boolean full () const;
}
                                //20 ÑÒÐÎÊÀ////


	stack :: stack () { s = new char [1000];
max_len = 1000; top = empty;}


	stack :: stack (int size, const char str [])	
{ s=new char [size]; max_len = size;
for (int i=0; imax_len && str !=0;++i)
s[i]=str[i];                               //30 ÑÒÐÎÊÀ////
}

	stack :: stack (const stack & str) {s=new char [str.max_len];
max_len=str.max_len;top=str.top
memory (s, str.s, max_len);


	stack :: stack (const stack & str):max_len(str.max_len)
top(str.top) {s=new char [str.max_len];
	memory (s, str.s, max_len);}           //40 ÑÒÐÎÊÀ////

	int main () { stack data; // êîíñòðóêòîð ïî óìîë÷àíèþ
stack data [N];     
stack w(4, "abcd");// w.s[0]='A', ..., ws[3]='D'
return 0;
}

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2007, 00:57
Ответы с готовыми решениями:

Конструкторы
#include "stdafx.h" #include <iostream> using namespace std; #include <string> #include...

Написать класс Треугольник... (Конструкторы С++)
Здравствуйте, помогите с решением нужно Написать класс треугольник имеющий 3 конструктора (...

Конструкторы, не могу прокоментировать текст проги
class stack { private: enum { Empty=-1}; char *s int max_len, top; public: stack(); ...

В проекте VS2012 компилятор игнорирует конструкторы классов
Компилятор отлично компилирует проект и не выдаёт ошибок, но при генерации DEBUG версии и надо...

2
0 / 0 / 0
Регистрация: 02.03.2007
Сообщений: 9
28.09.2007, 01:04 2
Автор этого письма я(69_rus). Извините, забыл войти под своим именем.
И еще-в комментариях там, где стоят числа(10, 20, 30...) -это номера строк
0
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
30.09.2007, 20:31 3
Ужасть. Код нерабочий, однозначно. Оформление безобразное. И раздает ведь кто-то такой код и не стесняется . Бррр...
Я даже не берусь перечислять все ошибки в этом коде... Самое бросающееся в глаза: два конструктора копирования, честно скажу, типа boolean в С++ не встречал, не стоит точка с запятой после описания класса...

Отвечаю на вопросы. Да, все приведенное может относиться к одному классу, только с некоторыми исправлениями. Вместо memory, я думаю, там должно стоять memcpy. Эта функция находится в memory.h.

Из этого кода я сделал нечто похожее на правду (может, так разберетесь):
Код
#include  memory.h;

class stack 
{ 
private: 
	enum {empty = -1}; 
	char *s ;  
	int max_len, top; 
public: 
	stack(); 
	stack(int size) 
	{ 
		s=new char[size]; 
		max_len = size; 
		top=empty; 
	} 
	stack(int size, const char str []); 
	stack(const stack &str);
	
	~ stack() 
	{ 
		delete [] s;
	}   

   void reset() 
   {
	   top=empty;
   }

   void push(char c); 
   char pop (); 
   char top_of() const; 
   bool full() const; 
}; 


stack::stack() 
{
	s = new char[1000]; 
	max_len = 1000; 
	top = empty;
} 


stack::stack (int size, const char str [])    
{
	s = new char [size]; 
	max_len = size; 
	for (int i=0; imax_len && str !=0;++i) 
		s[i]=str[i];                             
} 

stack::stack(const stack & str) 
{
	s = new char [str.max_len]; 
	max_len = str.max_len;
	top = str.top; 
	memcpy(s, str.s, max_len);
}        

int main ()
{
                stack data; 
	stack data1(100);      
	stack w(4, "abcd"); 
	return 0; 
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.09.2007, 20:31

[дизайн и эволюция] провалы в variadic конструкторы
всем привет. уже несколько человек обращались ко мне по почте, с просьбой помочь разобраться с...

Конструкторы,передача сообщений объектам и реакции объектов на сообщения в С++
Привет всем! Тему чуть-чуть понимаю,но задачу сделать не могу, вы не могли бы мне помочь с этим?...

Webpack собирает проект, а приложение говорит что мои конструкторы не конструкторы
Помогите пожалуйста, в едином файле (не билде) всё работает хорошо, как только начинаю отделять...

Определите класс матриц. Напишите перегруженные конструкторы для создания одномерной и двумерной матриц. В конструкторы передаются размерности матриц
Доброго времени суток всем) Извините если не в том разделе) Не могу понять как решить данную...


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

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

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