程序设计上机作业题1

本文详细阐述了一个改进的C++类实现,用于高效地处理字符串操作,包括复制、显示、重置和获取字符串大小。通过优化析构函数和成员函数,实现了资源的有效管理。同时,展示了如何在函数间传递和修改对象引用,以及类内部的方法重载。通过实例演示了类的使用,确保了代码的清晰性和易用性。
摘要由CSDN通过智能技术生成

原题

/// Mid - Exam @ 20120421 14:00 -17:00
# include <iostream > // cout , endl
# include <cstring > // strlen , strcpy
using namespace std;
class bug
{
        char * data_ ;
        public :
        bug( const char * str )
        {
                data_ = new char [ strlen (str )+1];
                strcpy (data_ , str );
        }
        ~bug ()
        {
                delete data_ ;
        }
        void show ()
        {
                cout << data_ << endl ;
        }
};
void test (bug str1 )
{
        str1.show ();
        bug str2 (" tsinghua ");
        str2.show ();
        str2 = str1 ;
        str2.show ();
}
int main ()
{
        bug str1 ("2011");
        str1.show ();
        test( str1 );
        str1.show ();
        return 0;
}


解答:

#include <iostream> // cout , endl

using namespace std;
class bug
{
        char * data_ ;
        public :
        bug( const char * str )
        {
                data_ = new char [ strlen (str )+1];
                strcpy (data_ , str );
        }
        ~bug ()
        {
                delete [] data_ ;
                data_ = NULL;
        }
        int size()
        {
                if( data_ = NULL )
                        return -1;
                else
                        return strlen(data_);
        }
        bool reget( const char* str)
        {
                delete [] data_;
                data_ = new char [ strlen (str )+1];
                if( NULL == data_ )
                {
                        return false;
                }
                else
                {
                        strcpy (data_ , str );
                        return true;
                }
        }
        bool get_str(char* & str)
        {
                if(NULL != str )
                {
                        delete[] str;
                        str = NULL;
                }
                str = new char [strlen(data_)+1];
                if( NULL == str) return false;
                strcpy(str,data_);
                return true;
        }
        void show ()
        {
                cout << data_ << endl ;
        }
        bug& operator= (bug& right)
        {
                char* str = NULL;
                if(right.get_str(str))
                {
                        reget(str);
                        delete[] str;
                }
        }

};

void test (bug& str1 )
{       
        str1.show ();
        bug str2 (" tsinghua ");
        str2.show ();
        str2 = str1 ;
        str2.show ();
}
int main ()
{
        bug str1 ("2011");
        str1.show ();
        test( str1 );
        str1.show ();
        return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值