Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » С++ | конструктор и operator[]

Ответить
Настройки темы
С++ | конструктор и operator[]

Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


1.Каким образом vec узнал, что он это параметр "v", а не "с".
2. Почему если в operator`e[] написать return с[i], все работает точно также как и при return v[i]; и вообще как работает operator[], что-то сам не могу понять как сделал. Почему vec[2] = 4 работает (вроде понимаю, но нужно слово того кто знает!)?

Код: Выделить весь код
 #include <iostream.h>
class vector
{
int* v;
int* c;
public:
	vector (int);
	~vector ();
	int& operator[] (int);
};
vector::vector (int s)
{
v = new int [s];
c = new int [s];
};
vector::~vector()
{delete v;
delete c;};
int& vector::operator[](int i)
{
return v[i];
};

vector vec(10);
main ()
{
vec[2] = 6;
cout << vec[2];
system("pause");
}

Отправлено: 18:16, 28-07-2005

 

Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


Какой-то бессмысленный код тут, имхо... Да еще и с ошибками... Писать надо не delete v, а delete [] v; А про перегрузку операторов см. в учебниках по С++
>>что-то сам не могу понять как сделал
значит не сделал, а бездумно скопировал


Отправлено: 18:40, 28-07-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Skrip
Цитата:
1.Каким образом vec узнал, что он это параметр "v", а не "с".
"он" это параметр this, который передаётся неявно. А v и c - это его поля. А про перегрузку операторов и ссылки, действительно, пишут во всех приличных учебниках.

-------
http://ivank.ru


Отправлено: 00:41, 29-07-2005 | #3


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Skrip
Скажие лучше, что вы хотели добиться этим кодом?? Может проблема быстрей решиться...

-------
Fortes fortuna adiuvat


Отправлено: 02:18, 29-07-2005 | #4


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Savant, какую-то часть я действительно списал (только объявление класса), когда разбирал пример из учебника, НО НЕ БЕЗДУМНО. Функцию operator[] сделал сам, но как работает не понял, порадоксально но факт.
ivank, спасибо.

А каким образом компилятор догадался, что в функции operator[](int i) переменная "i" указывается между квадратными скобками ("vec[i]= 2", а не "vec[](i) = 2")
возможно сформулировал непонятно.

Последний раз редактировалось Skrip, 29-07-2005 в 08:43.


Отправлено: 05:09, 29-07-2005 | #5


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


Skrip
Цитата:
А каким образом компилятор догадался, что в функции operator[](int i) переменная "i"...
Тяжелый случай... Теория: с точки зрения компилятора, перегружаемые операторы есть самые обыкновенные функции. Поэтому в объявлении:
Код: Выделить весь код
int & vector::operator [] (int i) ;
int& - тип возвращаемого значения,
operator[] - имя функции,
int i - тип и количество аргументов.
Другое дело, что вызывается она немного по-другому... А именно так, как это определено в синтаксисе конкретного операнда.

Если у Вас в учебнике про это ни слова, смените учебник. Или прочтите эту статью (первое, что нашлось в гугле)

Отправлено: 13:58, 29-07-2005 | #6


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Skrip
Цитата:
А каким образом компилятор догадался, что в функции operator[](int i) переменная "i" указывается между квадратными скобками ("vec[i]= 2", а не "vec[](i) = 2")
Он умный. Как ни странно компилятор знает синтаксис языка C++. Если мне не изменяет память, то можно было бы написать vec.operator[](i) = 2 вместо vec[i]=2.

-------
http://ivank.ru


Отправлено: 13:59, 29-07-2005 | #7


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем спасибо!

Отправлено: 17:32, 29-07-2005 | #8


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Подскажите мне еще пожалуйста почему current_size недоступна в stlen.
Код: Выделить весь код
#include <iostream.h>
class m_string
{
friend int stlen (m_string);
public:
    m_string();
    m_string(int);
    ~m_string();
    char operator[](int i){return str[i];};
    m_string operator= (char* cr);

private:
int mas_size, current_size;
char* str;    
};



extern int stlen (m_string sttr)
{
    while (sttr[current_size] != '\0')
    {current_size++;};
    return current_size;
};

Отправлено: 12:05, 30-07-2005 | #9


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


Skrip
Цитата:
Подскажите мне еще пожалуйста почему current_size недоступна в stlen.
Дык в дружественные функции this не передается, поэтому надо писать sttr.current_size вместо current_size

Отправлено: 12:58, 30-07-2005 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » С++ | конструктор и operator[]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Служебные - [addon] Утилита конструктор TextMode MassStorage-аддона (конструктор) Mr dUSHA Наборы обновлений для Windows XP/2003/Windows 7 845 27-05-2016 14:39
C/C++ - Перегрузка операторов 'operator []' ganselo Программирование и базы данных 3 29-03-2009 14:57
OperaTor Sharik987 Хочу все знать 5 04-12-2008 12:37
[решено] Основы C++ | Использование operator[int, ...] hasherfrog Программирование и базы данных 2 28-09-2006 15:20
Основы C++ | Перегрузка operator+ для m_string Skrip Программирование и базы данных 1 10-08-2005 13:41




 
Переход