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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2009, 21:52   #1
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
Вопрос арифметика класса + объект this

Помогите плиз с лабораторной работой.
Задание звучит так:
Организовать арифметику класса ( сложение вычитание и сравнение) в виде именованных функций, сохраняющих результат в объекте «this».

По условию у меня класс для работы со строкой переменной длины.
Подскажите что должна представлять собой арифметика класса?? И что это за объект this и как с ним работать?? Побывал гуглить, ничего толкового не нашёл...

Вот непосредственно сам код класса.

заголовочный файл
Код:
#ifndef __STROKA_H__
#define __STROKA_H__

#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

class stroka
{
public:
	stroka(char *);
	~stroka();
	void in_str(char*);
	void stroka::out_str();
	void stroka::add(char*);
	void stroka::del(char);
private:
	char *str;

};

#endif
файл запуска
Код:
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include "STROKA.h"

void in_add( char *str_add)
{
	cout << "Vvedite stroky:" <<endl;
	cin >> str_add;
}

void in( char *new_str)
{
	cout << "Vvedite stroky:" <<endl;
	cin >> new_str;
}

char in_del(char del_sim)
{
	cout << "Vvedite ydalyaemie simvoli" <<endl;
	cin >> del_sim;
	return del_sim;
}

void menu(stroka st1, char *str_add, char *new_str,char del_sim)
{
	int choice, p=1;

	while (p==1)
	{
		clrscr();
		cout << "1. Vvod stroki" <<endl<<"2. Vivod na ekran" <<endl
		<<"3. Dobavlenie "<<endl << "4. Ydalenie simvola" <<endl
		<<"5. EXIT"<<endl;
		cin >> choice;
		switch (choice)
		{
			case 1:	in(new_str); st1.in_str(new_str);            getch(); break;
			case 2:	st1.out_str();					getch(); break;
			case 3:	in_add(str_add); st1.add(str_add);		getch(); break;
			case 4:	st1.del(in_del(del_sim));			getch(); break;
			case 5:	p=0;							            break;
			default:         cout << "BUG!!";
		}
	}
}



//---------------------------------------------------------------------------
void main()
{
	clrscr();
	char del_sim;
	char str_add[100];
	char new_str[100];
	stroka st1(NULL);
	menu(st1, str_add, new_str, del_sim);

}

файл с методами класса

Код:
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include "STROKA.h" 



void stroka::in_str(char *temp)												//VVod stroki
{
	int k;
	k=strlen(temp);
	str=(char*)realloc(str,k);
	strcpy(str, temp);
}

//---------------------------------------------------------------------------
void stroka::out_str()												//Vivod na ekran
	{
		cout << "Stroka: " << str << endl;
	}
//---------------------------------------------------------------------------
void stroka::add(char *str_add)													//dobavlenie simvolov
{
	int k,m;
	k=strlen(str);
	m=strlen(str_add);
	str=(char*)realloc(str, k+m);
	strcat(str, str_add);
}
//---------------------------------------------------------------------------
void stroka::del(char del_sim)													//Ydalenie simvolov
{
	int k;
	char str_temp[100];
	int i,j;
	for (i=0, j=0; str[i]; i++, j++)
	{
		if (str[i]==del_sim) j--;
		else
			{
				str_temp[j]=str[i];
			}
	}
	str_temp[j]=NULL;
	k=strlen(str_temp);
	str=(char*)realloc(str,k);
	strcpy(str, str_temp);
}
//---------------------------------------------------------------------------
stroka::stroka(char *str)											//Konstryktor
{
	stroka::str=new char[1];
	strcpy(stroka::str, str);
}
//---------------------------------------------------------------------------
stroka::~stroka()														//Destryktor
{
 delete []str;
}

Последний раз редактировалось Nitrino; 18.10.2009 в 21:56.
Nitrino вне форума Ответить с цитированием
Старый 18.10.2009, 23:25   #2
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

Есть кто-нибудь кто может помочь разобраться?
Nitrino вне форума Ответить с цитированием
Старый 18.10.2009, 23:38   #3
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Подскажите что должна представлять собой арифметика класса??
Наверное обычная арифметика, только в отношении вашего класса.
Т.е. операции +,-,*,/ ну и т.д. (в разумных пределах)

Цитата:
И что это за объект this и как с ним работать??
Это неявный указатель объекта на самого себя. При создании объекта класса внутри объекта создается этот самый this, который указывает на этот же объект

Код:
void stroka::add(char *str_add)	//dobavlenie simvolov
{
	int k,m;
	k=strlen(str);
	m=strlen(str_add);
	str=(char*)realloc(str, k+m);
	strcat(str, str_add); // можно написать так strcat(this->str, str_add);
}

зы: по моему strcat сама перевыделяет память и realloc будет лишним
counter вне форума Ответить с цитированием
Старый 19.10.2009, 00:46   #4
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

я в main создаю новый объект
Код:
stroka l("bbb");
и функцией
Код:
void stroka::sravn(stroka &l)
{
	int k;
	k=strcmp(str, l.stroka);
	cout <<endl << k;
}
хочу вывести результат сравнение этих строк
вызываю эту функцию
Код:
st1.sravn(l);
компилятор выдаёт ошибку
Error STROKA.CPP 54: 'stroka' is not a member of 'stroka'

Что не так??
Плиз помогите разобрать а то до утра помучаюсь с ней...

Последний раз редактировалось Nitrino; 19.10.2009 в 00:49.
Nitrino вне форума Ответить с цитированием
Старый 19.10.2009, 21:00   #5
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
компилятор выдаёт ошибку
Error STROKA.CPP 54: 'stroka' is not a member of 'stroka'
в классе stroka нет члена с именем stroka

Код:
void stroka::sravn(stroka &l)
{
	int k;
	k=strcmp(str, l.str);
	cout <<endl << k;
}
counter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать, создавался ли уже объект класса? TwiX Общие вопросы Delphi 4 06.10.2009 09:44
длинная арифметика Dimarik Общие вопросы C/C++ 1 16.09.2009 12:02
объект класса TBItmap albatros Мультимедиа в Delphi 3 27.03.2009 16:23
Целочисленная арифметика Doublefaced Помощь студентам 11 22.03.2009 19:33
Длинная арифметика DmT Помощь студентам 2 06.10.2007 22:43