第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請教大佬,該如何定義一個Mystring類?有什么方法?

請教大佬,該如何定義一個Mystring類?有什么方法?

慕工程0101907 2021-06-28 11:07:19
//myString.h#pragma once#include <ostream>using namespace std;class myString{char* _mystring; public:myString(const char* str);myString(const myString& str1,const myString& str2);myString(const int len);~myString(void);friend ostream & operator<<(ostream &,const myString &); friend myString operator+(const myString& str1,const myString& str2);const int count() const;const char & operator[](unsigned short offset) const; };//myString.cpp#include "myString.h"#include <string.h>myString operator+( const myString& str1,const myString& str2 ){myString temp(str1,str2);return temp;}ostream & operator<<( ostream & out,const myString & str ){for(int i=0;i<str.count();i++){out<<str[i];}return out;}myString::myString(const char* str){_mystring=new char[strlen(str)+1];strcpy(_mystring,str);}myString::myString( const int len ){_mystring=new char[len];memset(_mystring,0,len);}myString::myString( const myString& str1,const myString& str2 ){_mystring=new char[str1.count()+str2.count()];for(int i=0;i<str1.count();i++){_mystring[i]=str1[i];}for(int j=0;j<str2.count();j++) //把這一行的j<str2()改為:j<=str2.count();亂碼消失,結果正確,但不理解為什么?{_mystring[str1.count()+j]=str2[j];}}myString::~myString(void){}const int myString::count() const{return strlen(_mystring);}怎么把剩下的friend ostream & operator<<(ostream &,const myString &); friend myString operator+(const myString& str1,const myString& str2);
查看完整描述

2 回答

?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

#include <iostream>
#include <cstring>
using namespace std;class MyString
{
public:
MyString();
MyString(char*);
MyString(const MyString&);
~MyString();
size_t length();
size_t size();
char at(unsigned);
MyString& operator =(const MyString&);
void print();
friend MyString operator +(const MyString&, const MyString&);

private:
char* szBuf;
size_t stSize;
size_t stLen;
};MyString::MyString(): stSize(256), stLen(0)
{
cout << "調用無參構造函數(shù)" << endl;
szBuf = new char[stSize];
}MyString::MyString(char* buf): stSize(256)
{
cout << "調用參數(shù)為字符指針的構造函數(shù)" << endl;
if (stSize-1 < strlen(buf))
{
stSize = strlen(buf) + 1;
}
szBuf = new char[stSize];
strcpy(szBuf, buf);
stLen = strlen(szBuf);
}MyString::MyString(const MyString& str): stSize(256)
{
cout << "調用拷貝構造函數(shù)" << endl;
if (stSize-1 < str.stLen)
{
stSize = str.stLen + 1;
}
szBuf = new char[stSize];
strcpy(szBuf, str.szBuf);
stLen = strlen(szBuf);
}MyString::~MyString()
{
cout << "調用析構函數(shù)" <<endl;
if (szBuf != NULL)
{
delete[] szBuf;
}
}size_t MyString::length()
{
return stLen;
}size_t MyString::size()
{
return stSize;
}char MyString::at(unsigned index)
{
if ((szBuf != NULL) && (index < stLen))
{
return szBuf[index];
}
return 0;
}MyString& MyString::operator=(const MyString& str)
{
if (stSize < str.stLen + 1)
{
delete[] szBuf;
stSize = str.stLen + 1;
szBuf = new char[stSize];
}
memset(szBuf, 0, stSize);
strcpy(szBuf, str.szBuf);
return *this;
}void MyString::print()
{
cout << this->szBuf;
}MyString operator+(const MyString& str1, const MyString& str2)
{
char *buf;
int len;

len = str1.stLen + str2.stLen + 1;
buf = new char[len];
strcpy(buf, str1.szBuf);
strcat(buf, str2.szBuf);
MyString str(buf);
delete[] buf;

return str;
}int main()
{
MyString* str1;
str1 = new MyString("abcdefe");
str1->print();
cout << endl;

MyString str2(*str1);
str2 = *str1 + str2;
cout << endl;
str2.print();
cout << endl;

for (int i = 0; i < str1->length(); i++)
{
cout << str1->at(i);
}
cout << endl;

delete str1;
return 0;
}



查看完整回答
反對 回復 2021-07-04
  • 2 回答
  • 0 關注
  • 262 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號