Как использовать конструктор копий для <vector>?

программирование С++

[17:39:52] do_smilegg: #include<iostream>
#include<vector>
using namespace std;
class longtype{
vector<int> a;
public:
longtype(){}
longtype(int num){
a.assign(num,0);
}
longtype(int *array,int n){
a.assign(n,0);
for(int i=0;i<n;i++) a[n-i-1]=array[i];
}
longtype(const longtype &n){
vector<int> b(n.size(),0);
for(int i=0;i<n.size();i++) b[i]=n[i];
}
int operator[](int i){
if((i<a.size())&&(i>=0)) return a[i];
else return 0;
}
void set(int x,int i){
a[i]=x;
}
int size(){
return a.size();
}
void push(int x){
a.push_back(x);
}
void show(){
for(int i=size()-1;i>=0;i--) cout<<a[i]<<" ";
cout<<endl;
}
longtype operator+(longtype n){
longtype sum(1);
int max=(size()>n.size()?size():n.size());
for(int i=0;i<max;i++){
sum.push((sum[i]+(*this)[i]+n[i])/10);
sum.set((sum[i]+(*this)[i]+n[i])%10,i);
}
return sum;
}
longtype operator-(longtype n){
longtype temp=(*this);
longtype dif(size());
for(int i=0;i<size();i++){
if(temp[i]<n[i]){
temp.set(temp[i+1]-1,i+1);
dif.set(temp[i]-n[i]+10,i);
}
else dif.set(temp[i]-n[i],i);
}
return dif;
}
longtype operator*(int n){ //n-one digit
longtype mul(1);
for(int i=0;i<size();i++){
mul.push(((*this)[i]*n+mul[i])/10);
mul.set(((*this)[i]*n+mul[i])%10,i);
}
return mul;
}
longtype operator=(longtype n){
int i=n.size()-1;
while(!n[i]) i--;
i++;
a.resize(i,0);
for(i;i>=0;i--) a[i]=n[i];
return *this;
}
~longtype(){}
};
int main(void){
int a[3]={7,3,5};
int b[5]={7,0,6,9,0};
longtype x(a,3);
longtype z;
z=(x*8);
cin.get();
return 0;
}
там где z=x*8 вызывается оператор присваивания
но при этом получается копия обьекта
и потом вызывается деструктор
который удаляет память вектора
чтобы решить проблему хочу использовать конструктор копий
но не знаю как для vector<int>
пробовал
longtype(const longtype &n){
vector<int> a(n.size(),0);
for(int i=0;i<n.size();i++) a[i]=n[i];
}
но пишет 16 C:\Users\Igor\Documents\Updater\long.cpp passing `const longtype' as `this' argument of `int longtype::size()' discards qualifiers
Ответы:
Потому что вы вызывается неконстантную функцию-член из константного объекта.
int longtype::size() должна гарантированно не изменять состояние объета, добавьте const в сигнатуру функции
int size() const;


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.