为什么赋值运算符重载不起作用?

时间:2017-11-14 07:54:37

标签: c++ c++11 operator-overloading

我在C ++中定义了类st,它就像C ++中提供的预定义字符串类一样; 并且它只能执行程序中所示的3个操作。 我重载了=+运算符,并且重载=运算符我正在将字符串文字复制到类的对象。 当我将它与类对象一起使用时,赋值运算符被重载,重载函数应该起作用。 但是旧=运算符给出了错误:error: conversion from ‘const char [9]’ to non-scalar type ‘st’ requested st s1="sfsefseg"; 为什么重载赋值运算符工作?

#include<iostream>
using namespace std;
class st{
    char *arr;
    int size;
    public:
    st(){
        arr=new char[0];
        size=0;
    }
    void operator=(const char*);
    friend st operator+(st&,st&);
    void display();
};
void st::operator=(const char *ch){
    int i;
    for(i=0;ch[i]!='\0';i++)
    size=i;
    delete [] arr;
    arr=new char[size];
    for(i=0;i<size;i++){
        arr[i]=ch[i];       
    }
    display();
}
st operator+(st &t,st &s){
    st temp;
    temp.size=t.size+s.size;
    temp.arr=new char[temp.size];
    for(int i=0;i<t.size;i++){
        temp.arr[i]=t.arr[i];
    }
    for(int i=0;i<s.size;i++){
        temp.arr[i+t.size]=s.arr[i];
    }
    temp.display();
    return temp;
}
void st::display(){
    if(size==0)
        cout<<"\nEmpty string";
    else{
        for(int i=0;i<size;i++)
            cout<<arr[i]<<"  ";
    }
}
int main(){
    st s1="sfsefseg";
    st s2="FJHSFK";
    st s3=s1+s2;
    return 0;
}

0 个答案:

没有答案