Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2014, 03:54   #1
nonsys
Пользователь
 
Регистрация: 25.09.2011
Сообщений: 11
По умолчанию C++. Проблема с ссылкой в классе (double&)

Доброго времени суток.
Как можно сделать конструктор по умолчанию, чтобы он мог корректно инициализировать ссылку на double?

Вот сам класс:
Код:
class Vector{
public:
	double &vector;
	int count, error;

	Vector();
	Vector(const Vector &V);
	Vector(int n);
	Vector(int n, double &data);
	~Vector();
        ....
};
Заранее спасибо.
Делаю лабораторную, если кому интересно откуда задание то вот: Создать класс вектор, содержащий ссылку на double, размерность вектора и переменную ошибки. Класс имеет конструкторы по умолчанию, конструктор с одним и двумя параметрами, конструктор копирования и деструктор. Определить оператор +, - , * , - как дружественные функции, =, +=, -=, *=,[] - как функции-члены. Определить функцию печати. Сравнить время работы созданного класса и встроенного массива типа double. Перегрузить операторы вывода и ввода в поток.
nonsys вне форума Ответить с цитированием
Старый 27.06.2014, 11:01   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

http://rextester.com/DSD96375

Код:
#include <iostream>


class Vector{
public:
    int count, error;  //<--- во избежание потенциальных проблем соблюдайте порядок следования мемберов таким же
	double &vector;    // в каком происходит инициализация этих мемберов
	

    // поскольку ссылку нельзя перенацелить, то создаваемый дефолтным конструктором объект уже никогда не будет указывать ни на что иное
    // поэтому, не указав источник данных сразу - вы никогда уже не сможете его указать
    // следовательно дефолтные конструкторы для такого класса просто не имеют смысла
    
//	Vector();  
//	Vector(int n); 
    

   ~Vector(){}
    
    Vector(const Vector &V)
        :count(V.count)
        ,error(V.error)
        ,vector(V.vector)    //<--- инициализация ссылочного члена в списках инициализации
   {}

	Vector(int n, double &data)
        :count(n)
        ,error(0)
        ,vector(data)    //<--- инициализация ссылочного члена в списках инициализации
   {}
    
   Vector& operator=(const Vector& rhs)  //<--- если вам понадобился конструктор копии, значит вам нужен и оператор присваивания
   {                                // Из-за ссылочного мембера, компилятор самостоятельно уже не сумеет построить для вас дефолтный
       count = rhs.count;
       error = rhs.error;
       return *this;
   }
};

int main()
{
    std::cout << "Hello, world!\n";
    
    double value = 1.5;
    
    Vector vec(10, value);
}
_Bers вне форума Ответить с цитированием
Старый 27.06.2014, 11:06   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с short и double guest45833 Visual C++ 3 23.02.2012 14:40
Проблема с выводом типа double ArmanPrestige Общие вопросы C/C++ 3 20.02.2012 03:58
Просто не понимаю б чём проблема!!!!!!!(char* && index) artush1984 Общие вопросы C/C++ 12 30.05.2009 03:30
проблема со ссылкой на textBox tolikman Microsoft Office Excel 4 09.01.2009 07:04
Проблема с MVC++ 2005 && 2008 на висте NetGod Софт 1 09.08.2008 17:14