Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 63 из 87<  1 ... 60  61  62  63  64  65  66 ... 87  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 07.01.2010
ну можно сделать окошко, которое будет невидимым и получать сообщения :)
а так - сделай обёртку для cin и в ней обрабатывай все специфические варианты нажатия на клавиши, и дальше в коде использую уже её.



Партнер
 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
доброго времени суток))
к примеру имеется некоторый класс
Код:
class polynom
{
   double *p;
   int len;
public :
   void alloc(int size);
   void free();
........
}

На
Код:
void polynom::alloc(int size)
{
   if (len>0)
      free();
   len=size;
   p=new double [size];
}

ругается не по-детски. В чем же тут затаилась причина? :oops:

Добавлено спустя 35 минут 15 секунд:
также жестко ругается на конструктор
Код:
polynom::polynom(int size)
{
   if (len>0)
      free();
   len=size;
   p=new double [size];
}

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
ругается какими словами?


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
на конструктор "конструкторы не разрешены для возвращаемого типа"
на функцию "переопределение; различные базовые типы"

Добавлено спустя 44 секунды:
и еще " перегруженная функция отличается от 'void polynom::alloc(int)' только возвращаемым типом"

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
отсутсвует ;

class polynom
{

};


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
как так?) Не, не, присутствует.

Добавлено спустя 1 минуту 13 секунд:
о, точно, спасибо

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Junior
Статус: Не в сети
Регистрация: 26.01.2008
Откуда: Ukraine
Доброе время суток. Помогите пожалуйста с переопределением операторов.

Код:
void operator * (char *S1){
   int t;
   t=strlen(S1);
   char *A1="L";
   char *S2;
   S2=new char[t];
   strcpy(S2,S1);
   int i;

   for(i=0;i<t;i=i+2)
   S2[i]=A1[0];
   cout<<"String output: "<<S2<<endl;
      };



Это работающий фрагмент, однако оператор умноение -- бинарный, следовательно, должно быть два операнда. Однако на код:

Код:
void operator * (char *S1, char *S2)


или

Код:
void operator * (char &S1, char &S2)


жестоко ругатся словами:

error C2804: binary 'operator *' has too many parameters
error C2333: 'stroka::operator *' : error in function declaration; skipping function body

Как заставить работать переопределенную операцию сразу с двумя аргументами(операндами)?


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
BMWM3GTR
эти перезагрузки - глобальные или для класса?
А вообще - см. MSDN и экспериментируйте. Тут делов на полчаса max :-)

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Junior
Статус: Не в сети
Регистрация: 26.01.2008
Откуда: Ukraine
Root писал(а):
BMWM3GTR
эти перезагрузки - глобальные или для класса?
А вообще - см. MSDN и экспериментируйте. Тут делов на полчаса max :-)

Эта перегрузка объявлена внутри класса.

пробуем, экспериментируем.


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
BMWM3GTR
есть очень классная штука. Под названием this :-)
Цитата:
// operator_overloading.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

struct Complex {
Complex( double r, double i ) : re(r), im(i) {}
Complex operator+( Complex &other );
void Display( ) { cout << re << ", " << im << endl; }
private:
double re, im;
};

// Operator overloaded using a member function
Complex Complex::operator+( Complex &other ) {
return Complex( re + other.re, im + other.im );
}

int main() {
Complex a = Complex( 1.2, 3.4 );
Complex b = Complex( 5.6, 7.8 );
Complex c = Complex( 0.0, 0.0 );

c = a + b;
c.Display();
}

Пример с MSDN. Прошу обратить внимание, что описание оператора принимает один аргумент. Второй (который не указан, но подразумевается) - сам объект класса, к которому применяется оператор.

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Junior
Статус: Не в сети
Регистрация: 26.01.2008
Откуда: Ukraine
Root
Спасибо, прога скомпилировалась, сейчас буду разбираться. :-)


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
бинарный оператор можно и вне класса определить

class Complex
{
//....
};

Complex operator+(const Complex &op1, const Complex &op2);


 

Junior
Статус: Не в сети
Регистрация: 26.01.2008
Откуда: Ukraine
Root
В Вашем варианте более-менее все понятно, единственное во фрагменте:

Код:
// Operator overloaded using a member function
Complex Complex::operator+( Complex &other ) {
return Complex( re + other.re, im + other.im );
}

В частности:

Код:
re + other.re


Это переменная re первого объекта плюс переменная re НЕ первого объекта, тоесть другого объекта, тоесть. Такое обьяснение правильно?

п.с. сорри, если немного непонятно изъясняюсь, но надо хорошо вникнуть в эту тему. Так что заранее спасибо :-)


progn
Вам тоже спасибо, вот что получилось, и главное оно работает:
Код:
#include <iostream>
#include "conio.h"
using namespace std;

class Complex {
public:
double re, im;

Complex( double r, double i ) {re=r;im=i;}
void Display( ) { cout << re << ", " << im << endl; }

};

Complex operator+(const Complex &op1, const Complex &op2)
{
return Complex( op1.re + op2.re, op1.im + op2.im );
}

int main() {

Complex a = Complex( 1.2, 3.4 );
Complex b = Complex( 5.6, 7.8 );
Complex c = Complex( 0.0, 0.0 );

c = a + b;
c.Display();
getch();
}


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
BMWM3GTR
Цитата:
Это переменная re первого объекта плюс переменная re НЕ первого объекта, тоесть другого объекта, тоесть. Такое обьяснение правильно?

да.

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
код

Complex Complex::operator+( Complex &other ) {
return Complex( re + other.re, im + other.im );
}

полностью аналогичен этому

Complex Complex::operator+( Complex &other ) {
return Complex( this->re + other.re, this->im + other.im );
}


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
добрый вечер
Пусть имеется некоторый класс vector. Т.е. массивов целых чисел. И к примеру функция умножения элементов массива на число.
Код:
class vector
{
   int mas[SIZE];
   int num;
public:
        friend void multiplication(vector &a, int c);
};
void multiplication(vector &a, int c)
{
   for (int i=0;i<SIZE;i++){
      a.mas[i]*=с;
   }
}

но почему-то ничего не умножается, а вместо этого в массиве имеется всякая чушь типа "-856565" и тд. Скажите пожалуйста, чем проблема?

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
manya
а кто будет массив mas заполнять? :-)

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
не-не, он заполняется в другой функции, а если не заполняется там, то все его элементы обнуляются :insane:

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
manya
тут скрытых траблов я не вижу. Берете отладчик в руки и вперед.

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 10.12.2003
manya
Если результат умножения не помещается в тип int (т.е. если, например, mas[i]*c > (2^31 - 1)), то тогда могут получится отрицательные числа.

Собственно не только отрицательные, но и вообще неверный результат, т.к. старшие биты просто потеряются.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 63 из 87<  1 ... 60  61  62  63  64  65  66 ... 87  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan