Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Jacky09
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 48
1

Перегрузка операции ~

22.10.2014, 17:24. Просмотров 880. Ответов 15
Метки нет (Все метки)

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

Вопрос: как работает операция дополнение и что значит - "чтобы она изменяла знак закрытых элементов – данных на противоположный для класса, содержащего три закрытых элемента"?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2014, 17:24
Ответы с готовыми решениями:

Перегрузка операции >>
Здравствуйте. Возник такой вопрос: возможни ли перегрузить оператор >> так,...

Перегрузка операции +
Всем привет! Ребята, обясните, пжлста, почему конструктор вызывается дважды....

Перегрузка операции >>
Всем привет! Суть: есть класс, есть объект, есть перегруженная операция >> для...

Перегрузка операции []
Добрый день. Столкнулся с недопониманием, странной ошибкой. #include...

Перегрузка операции =
Подскажите пожалуйста как для шаблонной функции перегрузить = есть не сложно то...

15
Kuzia domovenok
2443 / 2151 / 525
Регистрация: 25.03.2012
Сообщений: 7,749
Записей в блоге: 1
22.10.2014, 17:30 2
C++
1
2
3
4
5
6
7
8
9
class vec3{
  public:
    vec3(int _x, int _y, int _z): x(_x), y(_y), z(_z){};
    vec3 operator ~(){
      return vec3(-x, -y, -z);
    }
  protected:
   int x, y, z;
};
1
Jacky09
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 48
22.10.2014, 17:31  [ТС] 3
Я понял это так: 3 закрытых элемента в классе(то есть private) в данном случае будут числами и нам надо просто поменять знак этих чисел при помощи перезагруженной операции. Верно?
0
Kuzia domovenok
2443 / 2151 / 525
Регистрация: 25.03.2012
Сообщений: 7,749
Записей в блоге: 1
22.10.2014, 17:31 4
Jacky09, и чё? а у меня не так?
0
Jacky09
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 48
22.10.2014, 17:33  [ТС] 5
Воу, спасибо за быстрый ответ
То есть мы просто должны вернуть числа с противоположным знаком, верно?

Добавлено через 24 секунды
я просто пока писал, ты уже ответил
0
0x10
2579 / 1758 / 289
Регистрация: 24.11.2012
Сообщений: 4,391
22.10.2014, 17:45 6
Jacky09, все ок, только обрати внимание, что по условию оператор должен быть дружественной функцией.
1
Jacky09
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 48
22.10.2014, 17:54  [ТС] 7
Не могу разобраться с этой строчкой
C++ (Qt)
1
vec3(int _x, int _y, int _z): x(_x), y(_y), z(_z){};
А так должна получится отдельная функция и в класс я должен приписать
C++ (Qt)
1
friend Function_name(Argument)?
0
0x10
2579 / 1758 / 289
Регистрация: 24.11.2012
Сообщений: 4,391
22.10.2014, 18:00 8
Цитата Сообщение от Jacky09 Посмотреть сообщение
Не могу разобраться с этой строчкой
Список инициализации
1
Jacky09
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 48
22.10.2014, 18:22  [ТС] 9
Конечно туговато въезжаю, можно примерно так сделать? :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Tilda{
  public:
    ftilda () {x=0,y=0};
friend int setxyz(ftilda);
friend tilda;
  protected:
   int x, y, z;
};
 
int setxyz (int X, int Y,int Z) {
x=X;
y=Y;
z=Z;
}
 
int tilda operator~() {
return (-x,-y,-z)
}
 
void main() {
setxyz(5,-20,15);
...
}
Мда, чет беда совсем
0
Kuzia domovenok
2443 / 2151 / 525
Регистрация: 25.03.2012
Сообщений: 7,749
Записей в блоге: 1
22.10.2014, 18:33 10
Jacky09, https://www.google.com/search?q=c%2B%2B+friend+operator+unary
C++
1
2
3
4
5
6
7
8
9
10
class vec3{
  public:
    vec3(int _x, int _y, int _z): x(_x), y(_y), z(_z){};
    friend vec3  operator ~(vec3 arg);
  protected:
   int x, y, z;
};
    vec3  operator ~(vec3 arg){
      return vec3(-arg.x, -arg.y, -arg.z);
    }
1
Jacky09
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 48
22.10.2014, 18:35  [ТС] 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Tilda{
  public:
   tilda () {x=0,y=0,z=0};
friend int setxyz(tilda);
friend tilda operator~(int p1,int p2,int p3);
  protected:
   int x, y, z;
};
 
int setxyz (int X, int Y,int Z) {
x=X;
y=Y;
z=Z;
}
 
int tilda operator~() {
return (-x,-y,-z)
}
 
void main() {
setxyz(5,-20,15);
...
}
Так и не разобрался

Добавлено через 1 минуту
Попробую разобраться, спасибо
0
Kuzia domovenok
2443 / 2151 / 525
Регистрация: 25.03.2012
Сообщений: 7,749
Записей в блоге: 1
22.10.2014, 18:38 12
Jacky09, значит, тебе рано изучать перегрузку операторов и классы вообще. Складывается впечатление, что ты нетвёрдо изучил обычные функции. Всё смешано в кучу: tilda и инты, друзья и члены, и.т.д...
1
Jacky09
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 48
22.10.2014, 18:43  [ТС] 13
да блин в инсте изучали С, остановились на структурах в прошлом году, а в новом сразу же классы. Сразу сложновато в лабах разобраться)

Добавлено через 3 минуты
Попробывал что-то вроде того:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class vec3{
  public:
    vec3(int _x, int _y, int _z): x(_x), y(_y), z(_z){};
    friend vec3  operator ~(vec3 arg);
    void get(){
            cout<<"XYZ please\n";
            cin>>x>>y>>z;
        }
        void disp(){
            cout<<x<<y<<z<<endl;
        }
  protected:
   int x, y, z;
}s1;
    vec3  operator ~(vec3 arg){
      return vec3(-arg.x, -arg.y, -arg.z);
    }
 
 
int main() {
    s1.get();
    s1.disp();
    ~s1;
}
Написал что: нет подходящего конструктора по умолчанию
0
Kuzia domovenok
2443 / 2151 / 525
Регистрация: 25.03.2012
Сообщений: 7,749
Записей в блоге: 1
22.10.2014, 18:46 14
Лучший ответ Сообщение было отмечено Jacky09 как решение

Решение

Цитата Сообщение от Jacky09 Посмотреть сообщение
Написал что: нет подходящего конструктора по умолчанию
создай конструктор по-умолчанию,
либо не создавай объектов без параметров!

Добавлено через 1 минуту
Цитата Сообщение от Jacky09 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
class vec3{
public: 
vec3(int _x, int _y, int _z): x(_x), y(_y), z(_z){};
 friend vec3 operator ~(vec3 arg); 
void get(){ cout<<"XYZ please\n"; cin>>x>>y>>z; } 
void disp(){ cout<<x<<y<<z<<endl; } 
protected: int x, y, z; 
}s1
;
C++
1
2
3
4
5
6
7
class vec3{
public: 
vec3(int _x, int _y, int _z): x(_x), y(_y), z(_z){};
 friend vec3 operator ~(vec3 arg); 
void disp(){ cout<<x<<y<<z<<endl; } 
protected: int x, y, z; 
}s1(0,0,0);
C++
1
2
3
4
5
6
7
8
9
10
class vec3{
public: 
vec3(int _x, int _y, int _z): x(_x), y(_y), z(_z){};
 friend vec3 operator ~(vec3 arg); 
void disp(){ cout<<x<<y<<z<<endl; } 
protected: int x, y, z; 
};
int main{
vec3 s1(0,0,0)
}
1
Jacky09
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 48
22.10.2014, 18:48  [ТС] 15
Спасибо
0
taras atavin
4205 / 1768 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
22.10.2014, 18:58 16
Цитата Сообщение от Jacky09 Посмотреть сообщение
Я понял это так: 3 закрытых элемента в классе(то есть private) в данном случае будут числами и нам надо просто поменять знак этих чисел при помощи перезагруженной операции. Верно?
Да.
1
22.10.2014, 18:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2014, 18:58

Перегрузка операции
Никак не могу понять как перегрузить оператор. Кучу примеров пересмотрел, но...

Перегрузка операции
Добрый день, Друзья! Столкнулся с такой проблемой, необходимо сравнить 2 пары...

Перегрузка операции =
Здравствуйте, в программе вылезает такая ошибка MainUnit.cpp(86): E2034...


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

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

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