C++语言程序设计:自定义MyString类型字符串,重载相应的操作符
Vivian 2018-06-04 来源 : 阅读 1776 评论 0

摘要:本文主要向大家介绍了C++语言程序设计的自定义MyString类型字符串,重载相应的操作符,希望对大家学习C++语言程序设计有所帮助。

本文主要向大家介绍了C++语言程序设计的自定义MyString类型字符串,重载相应的操作符,希望对大家学习C++语言程序设计有所帮助。

自定义MyString类型字符串,重载相应的操作符;

#include"iostream"  //包含C++的头文件。
#include"MyString.h"
using namespace std;    //使用标准的std命名空间(在这个空间里面定义了很多的标准定义)
//在iostream中没有引入std命名空间,在此所以要自己写;如果不写则需要显示引入std;
 
 
 
void main(){
    /*
    MyString s1;
    MyString s2("hahahaha");
    MyString s3(NULL);
    MyString s4 = s2;
    MyString *s5 = new MyString();
    */
    MyString s2("hahahaha");
    MyString s6 = "heiheihei";//这种调用的是有参构造函数;
    s6 = s2;//这种是复制内容
    cout << s6.getString() << endl;
    s6 = "heheheh";//也是复制内容,以上两种都需要重载等号操作符;
    cout << s6.getString() << endl;
 
    s6[1] = 'A';//重载[]运算符;
    cout << s6[1] << endl;
    system("pause");
}

   

头文件:


#pragma once
class MyString
{
public:
    MyString();
    MyString(const char* str);
    MyString(const MyString & str);
    ~MyString();
    char* getString();
    MyString& operator=(MyString& s);
    MyString& operator=(char* s);
    char& operator[](int position);
private:
    int len;
    char* mystr;
};

   


MyString.cpp


#include "MyString.h"
#include<iostream>
using namespace std;
 
 
MyString::MyString()
{
    cout << "无参构造函数" << endl;
    len = 0;
    mystr = new char[len + 1];
    strcpy(mystr,"");
}
 
MyString::MyString(const char* str)
{
    cout << "有参构造函数" << endl;
    if (str==NULL)
    {
        len = 0;
        mystr = new char[len + 1];
        strcpy(mystr, "");
    }
    else {
        len = strlen(str);
        mystr = new char[len + 1];
        strcpy(mystr, str);
    }
}
MyString::MyString(const MyString & str)
{
    cout << "拷贝构造函数" << endl;
    len = str.len;
    mystr = new char[len+1];
    strcpy(mystr,str.mystr);
}
 
MyString& MyString::operator=(MyString& s)
{
    if (mystr!=NULL)
    {
        delete[] mystr;
        len = 0;
    }
 
    mystr = new char[s.len + 1];
    strcpy(mystr,s.mystr);
    len = s.len;
    return *this;
}
MyString& MyString::operator=(char* s)
{
    if (s==NULL)
    {
        len = 0;
        mystr = new char[len + 1];
        strcpy(mystr,"");
    }
    else {
        if (mystr != NULL)
        {
            delete[] mystr;
            len = 0;
        }
        len = strlen(s);
        mystr = new char[len + 1];
        strcpy(mystr, s);
    }
    return *this;
}
char* MyString::getString()
{
    return mystr;
}
 
//重载[];
char& MyString::operator[](int position)
{
    return mystr[position];
}
MyString::~MyString()
{
    if (mystr!=NULL)
    {
        delete [] mystr;
        mystr = NULL;
    }
    len = 0;
}
</iostream>

   

总结:一个类中如果有指针的话,一般需要写拷贝构造函数和=重载运算符;这两个涉及到内存析构问题(深浅拷贝)。

以上就介绍了C/C+的相关知识,希望对C/C+有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言C/C+频道!

本文由 @Vivian 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程