LINUX.ORG.RU

[C++] Что-то туплю с наследованием

 


0

1

В ublas существует класс векторов, однако там не реализованы некоторые нужные мне методы, поэтому я создал свой класс, наследованный от boost::numeric::ublas::vector;

class Vector : public vector<long double> {
public:
        Vector();
        Vector(long double t, const Vector &vec);
        Vector(int size);

        Vector &operator <<(const long double &value);
        Vector &operator <<(const Vector &value);

        long double norm();
};
В этом случае ведь операторы присваивания, умножения на число и т.д также наследуются, т.е должны быть допустимы конструкции:
Vector v1;
v1 = v2-v3;
Но он ругается:
/home/sol/Dropbox/cpp_source/diffEqSolver/main.cpp:26: error: no match for ‘operator=’ in ‘v3 = boost::numeric::ublas::operator-(const boost::numeric::ublas::vector_expression<E>&, const boost::numeric::ublas::vector_expression<E2>&) [with E1 = boost::numeric::ublas::vector<long double, boost::numeric::ublas::unbounded_array<long double, std::allocator<long double> > >, E2 = boost::numeric::ublas::vector<long double, boost::numeric::ublas::unbounded_array<long double, std::allocator<long double> > >](((const boost::numeric::ublas::vector_expression<boost::numeric::ublas::vector<long double, boost::numeric::ublas::unbounded_array<long double, std::allocator<long double> > > >&)((const boost::numeric::ublas::vector_expression<boost::numeric::ublas::vector<long double, boost::numeric::ublas::unbounded_array<long double, std::allocator<long double> > > >*)(& v1))))’

/home/sol/Dropbox/cpp_source/diffEqSolver/algebra.h:8: candidates are: Vector& Vector::operator=(const Vector&)
В чем дело?
PS: После Qt любая другая библиотека кажется какой-то недопиленной

В чем дело?

в том, что если у тебя есть класс А, и B, наследованный от A, то нельзя присвоить:

B b = A();

добавь соотв-ий конструктор

vaino
()

У него деструктор невиртуальный, лучше обойтись агрегацией, чем наследованием.

schizoid ★★★
()

Because a copy assignment operator is implicitly declared for a class if not declared by the user, a base class copy assignment operator is always hidden by the copy assignment operator of a derived class (13.5.3). A using-declaration (7.3.3) that brings in from a base class an assignment operator with a parameter type that could be that of a copy-assignment operator for the derived class is not considered an explicit declaration of a copy-assignment operator and does not suppress the implicit declaration of the derived class copy-assignment operator; the operator introduced by the using-declaration is hidden by the implicitly-declared copy-assignment operator in the derived class.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.