|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.10.2012, 08:24 | #1 |
Пользователь
Регистрация: 24.07.2010
Сообщений: 25
|
перегрузка операторов
Всем привет. Дошел до темы перегрузки операторов и возникло два вопроса.
Первый: Чем отличается вот этот код Код HTML:
String String::operator+=(const String other) { char *c_str = new char[str_size + other.str_size + 1]; strcpy(c_str, str); strcat(c_str, other.str); delete[] str; str = c_str; str_size = str_size + other.str_size; return *this; } Код HTML:
String & String::operator+=(const String &other) { char *c_str = new char[str_size + other.str_size + 1];бо strcpy(c_str, str); strcat(c_str, other.str); delete[] str; str = c_str; str_size = str_size + other.str_size; return *this; } И второй: Зачем возвращать указатель на текущий объект? Заранее спасибо. |
25.10.2012, 08:43 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
1)в первом случае создается копия объекта(расходы на создание).
во втором такого нет. 2)не указатель, а ссылку. а возвращаем для поддержки выражений. аля: Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
25.10.2012, 09:40 | #3 |
Пользователь
Регистрация: 24.07.2010
Сообщений: 25
|
А что происходит во втором случае?
И почему вот эту перегрузку нельзя прописать внутри класса и также вернуть ссылку? Код:
Последний раз редактировалось Stilet; 26.10.2012 в 07:38. |
25.10.2012, 10:16 | #4 | |||
Форумчанин
Регистрация: 16.12.2009
Сообщений: 224
|
Цитата:
Код:
Цитата:
Цитата:
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
Последний раз редактировалось Stilet; 26.10.2012 в 07:39. |
|||
26.10.2012, 06:28 | #5 |
Пользователь
Регистрация: 24.07.2010
Сообщений: 25
|
А в каких случаях надо применять синтаксис из первого примера, а в каких из второго? Можно пример?
|
28.10.2012, 15:05 | #6 |
Регистрация: 12.09.2010
Сообщений: 3
|
Перегрузка операторов Вектор * на Вектор
С ув., мне понятен класс для перегрузки операторов, а вот нужен int main(),и мне не ясен как его описать, если беру vector a() то это не правильно, а как правильнее вводить данные о вектора а и б, и вывести результат?
#include "stdafx.h" #include <vector> #include <iostream> using namespace std; class vector { double x,y,z; public: vector(double vX=0, double vY=0, double vZ=0){ x=vX; y=vY; z=vZ; } //конструктор ~vector(); //деструктор friend vector operator*(vector a, vector b){// перегруженный бинарный оператор *,скалярное произведение векторов return a.x*b.x+a.y*b.y+a.z*b.z; } }; int main(){ // vector a; a(1,2,3); vector b; b(3,2,1); --------> в программе указывает что класс вектор не назначен - как понять? } Последний раз редактировалось N___G; 28.10.2012 в 15:13. Причина: добавил свой вариант int main(){ |
28.10.2012, 16:57 | #7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
потому что конструктор нужно вызывать при объявлении.
Код:
да и friend у вас ни к чему. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перегрузка операторов | SmileOn | Visual C++ | 5 | 28.04.2012 11:40 |
Перегрузка операторов C++ | applegrub | Общие вопросы C/C++ | 4 | 20.12.2011 01:04 |
Перегрузка операторов | Jugger | Помощь студентам | 7 | 23.11.2011 23:40 |
Перегрузка операторов | raspberry | Общие вопросы C/C++ | 2 | 06.04.2010 00:19 |
Перегрузка операторов, Организация перегрузки операторов | chagin_yav | Помощь студентам | 2 | 12.05.2008 09:15 |