Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

Как это сделать? - C++

31.05.2012, 13:26. Просмотров 315. Ответов 6
Метки нет (Все метки)

Предположим, есть некоторый класс, например, TTrigonometricComplex и я хочу сделать нём функции, которые будут доступны в левой части оператора присваивания и будут выполнять некоторые операции при присваивании, если же их указать в правой части, то другие.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
TTrigonometricComplex
{
 protected:
  double AbsoluteData;
  double ArgumentData;
 public:
  double &Absolute     (); // Эта функция вопросов не вызывает
  double &Argument   (); // И эта функция вопросов не вызывает
  double &Real           (); // А эта вызывает
  double &&Imaginary(); // И эта тоже
};
double TTrigonometricComplex::Absolute ()
{
 return AbsoluteData;
}
double TTrigonometricComplex::Argument()
{
 return ArgumentData;
}
C++
1
2
3
4
5
6
7
8
9
10
TTrigonometricComplex a;
double x;
x=a.Absolute  (); // Функция вернёт ссылку, оператор выполнит x=AbsoluteData;
x=a.Argument(); // Функция вернёт ссылку, оператор выполнит x=ArgumentData;
a.Absolute  ()=x; // Функция вернёт ссылку, оператор выполнит AbsoluteData  =x;
a.Argument()=x; // Функция вернёт ссылку, оператор выполнит ArgumentData=x;
x=a.Real(); // Здесь надо выполнить x=AbsoluteData*cos(ArgumentData);
a.Real()=x; // А здесь TAlgebraicComplex b; b.Real()=x; b.Imaginary()=a.&Imaginary(); a=b;, то есть вычислить новые AbsoluteData и ArgumentData, соответствующие действительной части, равной x и мнимой части, равной старому значению мнимой части a
x=a.Imaginary(); // Здесь надо выполнить x=AbsoluteData*sin(ArgumentData);
a.Imaginary()=x; // А здесь TAlgebraicComplex b; b.Imaginary()=x; b.Real()=a.&Real(); a=b;, то есть вычислить новые AbsoluteData и ArgumentData, соответствующие мнимой части, равной x и действительной части, равной старому значению действительной части a
.
Можно это вообще сделать? И как?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2012, 13:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как это сделать? (C++):

нужно создать таблицу из 3 строк и 4 столбцов и заполнить её (любой информацией,это неважно) . Как это можно сделать ? - C++
Здравствуйте.У меня возникла проблема. Помогите пожалуйста!Модуль в понедельник , про таблицы ничего не рассказывали , а преподаватель...

Как это сделать? - C++
Класс, у него несколько гарантированных экземпляров, из них ровно один создан конструктором по умолчанию, средствами языка запрещено...

как это сделать - C++
вы мне можете помочь, никак не могу понять как это вбить в СИ??? "x-x^/3!+x^/5!+.. . + x^^"'^^V(2n + l)! Функция sh(x) " как это...

Как это сделать - C++
У меня такой код #include <iostream> using namespace std; #include <conio.h> int main(){ char input = 'a'; double...

Как это сделать? - C++
Нужно заменить цифры в числе на ноль, если цифра равна "a". А затем вывести получившееся число. число N - натуральное, а - является...

Как это сделать ? [c++] - C++
Вот допустим у меня есть функция inline void fun(char* аргумент1, char *аргумент2) и есть 2 функция fun("аргумент1 ",...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
31.05.2012, 14:39 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class TempTrigReal {
    double AbsoluteValue, ArgumentData;
protected:
    friend class TTrigonometricComplex;
    TempTrigReal(const double&, const double&);
public:
    double operator=(const double&);
    operator double();
};
 
TempTrigReal TTrigonometricComplex::Real() {
    return TempTrigReal(AbsoluteValue, ArgumentData);
}
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.05.2012, 14:44  [ТС] #3
Не очень понял.
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
31.05.2012, 15:08 #4
Функция Real() возвращает объект вспомогательного класса. Он обладает оператором= и оператором double, т. е. ему можно присваивать значение и можно использовать его как значение.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
31.05.2012, 16:39  [ТС] #5
На каждое свойство заводить по отдельному классу? И потомкам TComplex их надо 4? Итого вместо 3-х классов 7? А каким образом он выполнит присваивание в поля экземпляра TTrigonometricComplex? Откуда он знает, где они находятся? Может внутри временного объекта завести ссылки, или указатели?
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
31.05.2012, 18:21 #6
Цитата Сообщение от taras atavin Посмотреть сообщение
Может внутри временного объекта завести ссылки, или указатели?
Точно, я здесь ошибся.

Насчет громоздкости - можно наследовать вспомогательные от какого-нибудь одного. Но за удобство написания платить все равно придется.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
01.06.2012, 07:10  [ТС] #7
У них алгоритмы разные, а громоздкость каждого и так мала.

Добавлено через 12 часов 44 минуты
А в TAlgebraicComplex надо наоборот и оба должны быть потомками абстрактного TComplex со всеми четырьмя функциями. Значит ли это, что в каждом из классов надо возвращать временные экземпляры специальных классов из всех 4-х функций, а в их операторах присваивания и приведения использовать информацию времени исполнения?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2012, 07:10
Привет! Вот еще темы с ответами:

Как это сделать? - C++
Как написать прогу, которая бы указывала количество слов в предложении, вводимое пользователем?

как это сделать - C++
помогите, погибаю!!! тема: заставка(screan sever)? сменяющая картинки из списка особенности: поддержка эффектов смены, формирование...

Как это сделать? - C++
Дан файл F, содержащий сведения об игрушках: название, стоимость, возрастные границы детей, для которых игрушка предназначена. Найти...

Как это возможно сделать? - C++
Как это сделать на с++


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.06.2012, 07:10
Ответ Создать тему
Опции темы

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