题目描述

请定义一个名为 MyString 的类,该类中包含一个 char* 类型的数据成员,该类支持
以下操作:

  1. 实现类型转换函数 operator int() 和 operator double(),分别将 MyString 类型转换为 int 类型和 double 类型。
  2. 实现运算符重载 operator =,实现 MyString 类型之间的赋值操作。
  3. 实现运算符重载 operator +,实现 MyString 类型的字符串拼接操作。
  4. 实现运算符重载 operator == 和 operator !=,分别实现 MyString 类型的等于和不等于操作。
  5. 实现运算符重载 operator [],实现 MyString 类型的下标操作符。
  6. 实现运算符重载 operator <<,实现将 MyString对象的字符串输出到标准输出流。

输入格式

两个char数组a,b、一个int型变量index,a,b均是字符串型的数值。


输出格式

六行,分别表示各重载操作符的测试结果,详见样例和main函数


样例数据

输入

12 34 1
11 11 3

输出

a = 12
b = 34
a is not equal to b
a + b = 1234
a[1] = 2
b[1] = 4
a = 11
b = 11
a is equal to b
a + b = 1111
a[3] = out of range
b[3] = out of range

备注

需要在实现 operator + 和 operator [] 运算符重载时,考虑内存泄漏和数组越界的情况,并进行相应的处理。
在实现 operator << 时,需要注意字符指针类型的输出。
main function:


int main() {
    char a[999], b[999];
    int index;
    while(cin>>a>>b>>index){
        MyString s1(a), s2(b), s3;
        int a_int = s1;
        cout << "a = " << a_int << endl;
        double b_double = s2;
        cout << "b = " << b_double << endl;

        if (s1 != s2){
            cout << "a is not equal to b" << endl;
        }
        else{
            cout << "a is equal to b" << endl;
        }

        s3 = s1 + s2;
        if(s3 == s1 + s2){
            cout << "a + b = "<< s3 << endl;
        }       

        try {
            cout << "a[" << index << "] = " << s1[index] << endl;
        }
        catch (const char* msg) {
            cout << msg << endl;
        }   
        try {
            cout << "b[" << index << "] = " << s2[index] << endl;
        }
        catch (const char* msg) {
            cout << msg << endl;
        }       
    }

    return 0;
}

操作

评测记录

优秀代码

信息

时间限制: 1s
内存限制: 128MB
评测模式: Normal

题解