Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Еще раз о шаблонах... operator<< 
:(
    Опции темы
Leksey
Дата 17.4.2005, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: нет
Всего: 1



Вот нужно написать свой класс по типу vector в STL.
Код

template <class Type,int size=64>
class MyVector
{
}

и для него нужны два оператора:
Код

std::ostream&   operator<<(std::ostream& os,const MyVector& vect)
const MyVector  MyVector::operator+(const MyVector&  right)

Каков будет синтаксис описания первого - как дружественного к классу и второго как внутриклассового?
и каков будет синтаксис определения операторов?
PM MAIL   Вверх
chipset
Дата 17.4.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Цитата(Leksey @ 17.4.2005, 02:37)
Каков будет синтаксис описания первого - как дружественного к классу

Он автоматически дружит с приватными членам поскольку является членом класса, насколько я знаю.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Leksey
Дата 17.4.2005, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: нет
Всего: 1



ПЕрвый оператор << нельзя описать внутри класса поскольку у него в качестве левого параметра выступает не объект типа MyVector.
PM MAIL   Вверх
bel_nikita
Дата 17.4.2005, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Цитата
ПЕрвый оператор << нельзя описать внутри класса поскольку у него в качестве левого параметра выступает не объект типа MyVector.

Как это нельзя? Для этого и есть шаблоныsmile
Код

template<class T> MyVector& operator << (T tData)
{
  ....
  return *this;
}



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Leksey
Дата 17.4.2005, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: нет
Всего: 1



В моем случае нельзя так как мой оператор предназначен для вывода на консоль и поэтому у него левый параметр ostream.
bel_nikita посмотри внимательнее на мой вопрос и найдешь строчку:
Код

std::ostream&   operator<<(std::ostream& os,const MyVector& vect)

PM MAIL   Вверх
LuckLess
Дата 18.4.2005, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 15.9.2004

Репутация: 1
Всего: 1



я делал так ..:
Код

#include <conio.h>
#include <iostream>
using namespace std;
    class vivod{
        public:
    char *str;
        vivod(){}
        vivod(char *f){
        str = new char[strlen(f)+1];
        strcpy(str,f);
        }

    };
    void operator<<(ostream& a , vivod i){
    a <<i.str;
    };
void main(void){
vivod myviv = "kaka";
cout << myviv;
_getch();
}

PM MAIL   Вверх
Leksey
Дата 18.4.2005, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: нет
Всего: 1



LuckLess я считаю что приведенный тобой код неправильный.Поскольку он нарушает концепцию инкапсуляции в ООП, зачем вообще тогда нужны классы если их содержимое открыто.Разве я не прав?
И еще мой основной вопрос был о шаблонах.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.