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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с классом, Подскажите, в чём ошибка. 
:(
    Опции темы
fippo
Дата 26.5.2008, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мне дали задание по инфе:
Код

class Vector
{
  double* Body; unsigned Size;
 public:
  Vector(unsigned size);
  ~Vector();
  double  operator[](unsigned i) const;
  double& operator[](unsigned i);
  unsigned size() const;
};

реализовать все член-функции и продемонстрировать на примере их использование.
Указание. 1).   В конструкторе выделяется динамическая память под массив из size элементов типа double (в котором и будут храниться элементы вектора). На эту память ссылается указатель Body. 2). В деструкторе освобождается память из-под Body. 3). Операторы [ ] обеспечивают доступ к элементам вектора для считывания и изменения. В них производится проверка индексации. 4). Член-функция size возвращает размер вектора. 5). Программа должна состоять из двух модулей: ‘main.cpp’ и ‘vect.cpp’. В ‘vect.cpp’ реализуются член-функции класса Vector, а в ‘main.cpp’ этот класс используется. Описание класса Vector вынести в файл заголовка ‘vect.h’, который подключается в оба модуля программы.


Вот то что я написал:

Vect.h
Код

class Vector
{
  double* Body; unsigned Size;
  public:
  Vector(unsigned size);
  ~Vector();
  double  operator[](unsigned i) const;
  double& operator[](unsigned i);
  unsigned size() const;
};


Vect.cpp
Код

#include "stdafx.h"
#include <iostream>
#include "vect.h"

Vector::Vector(unsigned int size)
{
    Vector::Body = new double[size];
    Vector::Size = size;
}

Vector::~Vector()
{
    delete[] Vector::Body;
    Vector::Size = 0;
}

double& Vector::operator [](unsigned i)
  {
      if(i<0 || Vector::Size<=i){std::cout << "индекс выходит за границы";}
      else
      {return Body[i];}
  } 

unsigned Vector::size() const
{
return Size;
}


main.cpp
Код

#include "stdafx.h"
#include <iostream>
#include "vect.h"
#include <conio.h>

int _tmain(int argc, _TCHAR* argv[])
{
    Vector v1(100);
    v1[10]=5;
    v1[20]=v1[10];
    std::cout << v1[10] << "\n";
    std::cout << v1.size() << "\n";
    getch();
    return 0;
}


Программа компилируется и работает, но препод говорит что это не правильно, что у меня не реализовано копирование. Подскажите плиз, что тут не так, и как это исправить. И ещё вопрос, зачем даны две строки:
  double  operator[](unsigned i) const;
  double& operator[](unsigned i);

PM MAIL   Вверх
rrrFer
Дата 26.5.2008, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



fippo, 
Цитата

не реализовано копирование

наверно имеется ввиду конструктор копирования:
Код

Vector::Vector(const Vector &V){
    Body = V.Body;
    Size  = V.size  ;
}

-думаю он примерно так должен выглядеть

PM MAIL WWW ICQ   Вверх
bronislav
Дата 26.5.2008, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(fippo @  26.5.2008,  05:23 Найти цитируемый пост)
double  operator[](unsigned i) const;
  double& operator[](unsigned i); 


Оператор индексации.

Чтобы можно было применять индексацию к объекту класса, не вызывая метод.
Код

Vector MyVector;
MyVector[2] = 1;




--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
math64
Дата 26.5.2008, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Код

// Конструктор копирования
Vector::Vector(const Vector& v) {
Body = NULL;
*this = v;
}
// Оператор копирования
Vector& Vector::operator=(const Vector& v) {
if (Body != NULL)
  delete[] Body;
Size = v.size();
Body = new double[Size];
for (int i = 0; i < Size; i++)
  (*this)[i] = // используется Vector::operator[](unsigned i)
  v[i]; // используется Vector::operator[](unsigned i) const
return *this;
}

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0446 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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