Форум программистов, компьютерный форум, киберфорум
Наши страницы

Абстрактный шаблонный класс - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ С клавиатуры вводится выражение вида с ор с (с-цифра, ор-знак операции). Вычислить значение выражения. Использовать оператор вариантов. http://www.cyberforum.ru/cpp-beginners/thread169322.html
Буду благодарен!=(( 1. С клавиатуры вводится выражение вида с ор с (с-цифра, ор-знак операции). Вычислить значение выражения. Использовать оператор вариантов. 2. Вывести на экран второго и...
C++ Операции с векторами и матрицами а) Написать программу, которая выполняет следующую операцию : Q = X +3*Y Где X, Y, Q – векторы размером 20x1. Все элементы векторов X і Y заполнить единицами. Также программа должна предлогать... http://www.cyberforum.ru/cpp-beginners/thread169316.html
Вопрос по программе. Нужно протабулировать ф-цию C++
Приветствую вас дамы и господа Тут такое дело... Задание: Код: # include <iostream.h> # include <conio.h> # include <math.h>
Экстремумы Матрицы и Подпрограммы C++
Здраствуйте помогите пожалуйста с задачками на С++! 1) Вычислите результат, указанный в варианте задания. Константа A (если она есть в варианте) и вектора X и (или) Y задаются вводом. Размер...
C++ класс. ввод данных http://www.cyberforum.ru/cpp-beginners/thread169296.html
Есть класс. У каждого имени - свое числовое значение. Нужно сделать так, чтобы после заполнения поля "имя" вылазило типа этого: "Сколько у этого человека будет значений?", ввести эти значения, и...
C++ Удаление цифр из символьной строки Доброго всем времени суток :) Такая задача: на языке C нужно составить программу удаления из строки символов только цифры. Например, строка "dfg546sv435", должно получиться "dfgsv". Поможете? подробнее

Показать сообщение отдельно
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
28.09.2010, 07:02
Пара замечаний к реализации:
Цитата Сообщение от Lavroff Посмотреть сообщение
C++
1
2
3
4
ConsoleMatr<T> operator +=(const ConsoleMatr&);
ConsoleMatr<T> operator +(const ConsoleMatr&);
ConsoleMatr<T> operator *=(const ConsoleMatr&);
ConsoleMatr<T> operator *(const ConsoleMatr&);
operator += и operator *= должны возвращать ConsoleMatr<T>&, а operator+ и operator* могут и должны быть const. И вообще, везде где ты возвращаешь *this, тип возвращаемого значения с большой вероятностью будет ссылкой.
C++
1
2
3
4
5
        template<class T>
        MathMatr<T>& MathMatr<T>::operator =(const MathMatr<T>& Ob)
        {
                if(this==&Ob)
                        return *this;
Оператор присваивания, который делает проверку на само-присваивание, с большой вероятностью не является exception-safe. И действительно, если в вызове SetSize произойдет исключение, то объект окажется в несколько странном состоянии.

Гораздо более надежной и простой является следующая реализация operator=:
C++
1
2
3
4
5
6
MathMatr & operator=(const MathMatr & other)
{
    MathMatr cpy(other);  // may throw
    cpy.swap(*this);  // can't throw
    return *this;
}
Причем swap должен быть небросающим. В твоем случае такой swap реализуется элементарно:
C++
1
2
3
4
void swap(MathMatr & other)
{
    Matrix.swap(other.Matrix);
}
C++
1
throw std::string("Size of two matrix for sum must be equal!");
Вместо выбрасывания просто строки было бы гораздо лучше использовать один из стандартных классов исключений. Например, сюда больше подойдет invalid_argument из stdexcept.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru