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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2012, 18:20   #1
SevenXP
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 44
По умолчанию Реализовать для объектов данного класса перегрузку операции

Вот задача.

Создать несколько объектов (например, a и b) разработанного класса. Класс – вектор (одномерный массив). Реализовать для объектов данного класса перегрузку операции [] (a[i]=b[j]). Содержимое объектов (a,b их векторов), до и после выполнения операции, вывести на экран.

Теперь вопрос. Создаю класс primer и допустим пишу void operator++ (пар1, пар2) { ...}

Вот как будет выглядеть код и можно ли передавать параметр в перегруженный оператор?

primer pr;
++pr(пар1,пар2); ??
SevenXP вне форума Ответить с цитированием
Старый 22.05.2012, 19:35   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,831
По умолчанию

Цитата:
и допустим пишу void operator++ (пар1, пар2) { ...}
Не допустим. У оператора ++ нет таких сигнатур.
p51x вне форума Ответить с цитированием
Старый 22.05.2012, 22:16   #3
SevenXP
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 44
По умолчанию

Да чуть больше прочитал и понял)) но появилась 1 проблемка кто обьяснит. Давне в MVS не писал на Win 32 console apllication
PHP код:
// zadanie_2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;

class 
vector
{   float f[3];      
  public: 
     
vector(float i,float j,float k){f[0]=if[1]=jf[2]=k;}
    
     
     
float &operator[](int i)    // перегрузка оператора []
     
{ if(i<|| i>2)                  // проверка на выход за границы массива
        
cout <<"No deapazon"<<endl;
           exit(
1); 
        }
        return 
f[i];                  
     }
};


int main()
vector ff(1,2,3);
vector ff2(11,12,13);
   
int i;
   
cout << "Vector (A)  "<<endl<<endl;
   for(
i=0i<3i++){
   
cout << " "<<ff[i];
   }
    
cout<<endl<<endl<<"Vector (B)  "<<endl<<endl;
   for(
i=0i<3i++){
   
cout << " "<<ff2[i];
   }
   
int j=2;
   for(
i=0i<3i++){ 
       
ff[i]=ff2[j];
       
j--;
       }
    
cout<<endl<<endl<<"Vector (A)  "<<endl<<endl;
   for(
i=0i<3i++)
   
cout << " "<<ff[i];
   
   
_sleep(3000);
   return 
0;

Вот как бы решение моей задачи. Но почему я должен все обьявлять явно? Когда пробую в конструкторе заполнить числа рандомом ругаеться на переменные f[i] и в маине

PHP код:
// zadanie_2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;

class 
vector
{   int f[5];      
  public: 
      
vector(){ for(int i=0i<5i++){
          
f[i]=rand()%(100);
      }}
    
     
     
float &operator[](int i)    // перегрузка оператора []
     
{ if(i<|| i>4)                  // проверка на выход за границы массива
        
cout <<"No deapazon"<<endl;
           exit(
1); 
        }
        return 
f[i];                  
     }
};


int main()
vector ff();
vector ff2();
   
int i;
   
cout << "Vector (A)  "<<endl<<endl;
   for(
i=0i<5i++){
   
cout << " "<<ff[i];
   }
    
cout<<endl<<endl<<"Vector (B)  "<<endl<<endl;
   for(
i=0i<5i++){
   
cout << " "<<ff2[i];
   }
   
int j=4;
   for(
i=0i<5i++){ 
       
ff[i]=ff2[j];
       
j--;
       }
    
cout<<endl<<endl<<"Vector (A)  "<<endl<<endl;
   for(
i=0i<5i++)
   
cout << " "<<ff[i];
   
   
_sleep(3000);
   return 
0;


Кто мне обьяснит я чуть забыл классы и некоторые вещи.
Когда нужно обьявлять класс
1) vector *a= new vector(1,2,3);
2) vector a(1,2,3);

Последний раз редактировалось SevenXP; 22.05.2012 в 22:28.
SevenXP вне форума Ответить с цитированием
Старый 22.05.2012, 22:24   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
но появилась 1 проблемка
в чем проблема то?
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 22.05.2012, 22:38   #5
SevenXP
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 44
По умолчанию

f[i] везде подчеркивает и фатальная ошибка. Когда делаю 2 вариант.
Скажите как сделать:
1) конструктор копирования;
2) деструктор;

Диструктор я делал раньше когда обьявлял обьект класса так допустим класс stroka (stroka a= new stroka("dsdsdsd"); ) то диструктор для него писал и небыло ошибок (там где обьявлял класс ~stroka(){ delete this;}) то по первому варианту решению моей задачи такое не проходит и выдает ошибку

Unhandled exception at 0x00964079 in zadanie_2.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x002D2F34).

Код:
// zadanie_N1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;

class stroka {
	
public:	
	string strochka;
	int n;
	stroka (string s): strochka(s) {
		n=strochka.size()-1;
			}
	~stroka(){delete this; }

	void poisk(){
	for (int i=n; i>0; i--)
		if(strochka[i]==' ' ) {
			strochka=strochka.substr(0,i);
			break;}
	}
};

int _tmain(int argc, _TCHAR* argv[])
{  
	stroka *st= new stroka("Roma go to home");
	stroka *st2= new stroka("Roma go to school and home");	

	cout<<"strika '"<<st->strochka<<"' size = "<<st->n<<endl;
	cout<<"strika '"<<st2->strochka<<"' size = "<<st2->n<<endl;

	if (st->n > st2->n) {
		st->poisk();
		cout<<"2-stro4ka = "<<st->strochka<<endl;
	}
	else {
		st2->poisk();
		cout<<"2-stro4ka = "<<st2->strochka<<endl;
		}

	_sleep(8000);
	return 0;
	
}
~stroka(){delete this; } тут нет такой ошибки.
SevenXP вне форума Ответить с цитированием
Старый 22.05.2012, 22:51   #6
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

У Вас явные проблемы с пониманием динамической памяти и классов.
Во-первых, если Вы создаете динамические объекты (оператором new), их нужно самому удалять (оператором delete)
Код:
stroka * str = new stroka ("ABC");
...
delete str;
Причем delete вызывает деструктор объекта.
Если объект создан статически
Код:
stroka str("ABC");
то деструктор будет вызван компилятором в конце области видимости объекта, и сам компилятор позаботится об удалении.

поэтому никаких delete this в деструкторе быть не должно, потому что удалением себя самого занимается не объект, а кто-то сверху.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 22.05.2012, 23:14   #7
SevenXP
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 44
По умолчанию

Начальника в вузе требует)). помогите для верхнего написать конструктор копирования; Я даже не пойму для чего он. Хотелось бы для zadanie_N1.cpp и zadanie_N2.cpp самого верхнего кода.

Я просто больже по PHP,MySQL,Jquery(java),CSS,HTML. а это тяжковато давно изучал.

Последний раз редактировалось SevenXP; 22.05.2012 в 23:16.
SevenXP вне форума Ответить с цитированием
Старый 22.05.2012, 23:17   #8
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Начальника в вузе требует
Что требует?
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 22.05.2012, 23:21   #9
SevenXP
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 44
По умолчанию

При выполнении контрольных заданий необходимо:
Если в задании требуется разработать класс, то он должен включать:
- компоненты данные
- методы:
а) конструктор по умолчанию;
б) конструктор с параметрами;
в) конструктор копирования;
г) деструктор;
д) методы класса для работы с данными.
Компоненты данные класса должны иметь атрибут private или protected (в зависимости от необходимости).
При реализации задания 1 функцию вывода содержимого объекта реализовать как внешнюю по отношению к классу
При реализации задания 3 в базовый класс (кроме перечисленных выше) добавить методы: set – инициализации данных базового класса, get – возврата данных класса.
SevenXP вне форума Ответить с цитированием
Старый 22.05.2012, 23:22   #10
SevenXP
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 44
По умолчанию

а) конструктор по умолчанию;
б) конструктор с параметрами;
г) деструктор;
Компоненты данные класса должны иметь атрибут private или protected (в зависимости от необходимости). - с этим в 1 задачи не пойму просит вывести через внешний метод значение. И хочет что бы данные были протектод или приват ппц!
SevenXP вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сбой при получении производства объектов класса COM для компонента с CLSID Vistar Общие вопросы .NET 3 10.07.2011 23:31
(Delphi) Реализовать иерархии объектов и заданные методы для них Eglath Помощь студентам 2 02.06.2011 00:17
Реализовать операции со стеком в массиве Firagon Visual C++ 1 27.05.2011 00:33
как реализовать общий счётчик объектов класса? ZigaZaga Общие вопросы по Java, Java SE, Kotlin 7 18.06.2010 10:51
Сортировка Хоара(для объектов класса) m9yt Общие вопросы C/C++ 0 02.06.2010 18:45