C 繼承 001 全面的MyString

2021-10-04 10:42:25 字數 4720 閱讀 6156

描述

程式填空,輸出指定結果

#include

#include

using

namespace std;

intstrlen

(const

char

* s)

void

strcpy

(char

* d,

const

char

* s)

intstrcmp

(const

char

* s1,

const

char

* s2)

return0;

}void

strcat

(char

* d,

const

char

* s)

class

mystring

;int

comparestring

(const

void

* e1,

const

void

* e2)

intmain()

; cout <<

"1. "

<< s1 << s2 << s3<< s4<< endl;

s4 = s3;

s3 = s1 + s3;

cout <<

"2. "

<< s1 << endl;

cout <<

"3. "

<< s2 << endl;

cout <<

"4. "

<< s3 << endl;

cout <<

"5. "

<< s4 << endl;

cout <<

"6. "

<< s1[2]

<< endl;

s2 = s1;

s1 =

"ijkl-"

; s1[2]

='a'

; cout <<

"7. "

<< s2 << endl;

cout <<

"8. "

<< s1 << endl;

s1 +

="mnop"

; cout <<

"9. "

<< s1 << endl;

s4 =

"qrst-"

+ s2;

cout <<

"10. "

<< s4 << endl;

s1 = s2 + s4 +

" uvw "

+"xyz"

; cout <<

"11. "

<< s1 << endl;

qsort

(sarray,4,

sizeof

(mystring)

,comparestring)

;for

(int i =

0;i <

4;i ++

) cout << sarray[i]

<< endl;

//s1的從下標0開始長度為4的子串

cout <0,4)

<< endl;

//s1的從下標5開始長度為10的子串

cout <5,10)

<< endl;

return0;

}

輸入

輸出

1. abcd-efgh-abcd-

2. abcd-

3.4. abcd-efgh-

5. efgh-

6. c

7. abcd-

8. ijal-

9. ijal-mnop

10. qrst-abcd-

11. abcd-qrst-abcd- uvw xyz

about

bigme

take

abcd

qrst-abcd-

需要構造的函式:

1.無參建構函式

2.有參建構函式,引數為char型別

3.複製建構函式

4.重構=,引數為char型別

5.重構cout<<,友元重構,輸出mystring中的char *指向的字串

6.重構=,引數為mystring型別

7.重構+號,為ms+ms

8.重構[int n],返回ms中的指標指向的列表[n]

9.重構+=,引數為char型別

10.重構+,友元重構,為char【】+ms

11.重構(int start , int len),返回從start開始的len個字元

私有成員定義

private

:char

*p;int size;

//string的長度

無參建構函式

mystring()

有參建構函式

mystring

(const

char

*s)

重構=,引數為char *

該重構函式返回ms的引用,這是等號的特性,方便連等

mystring &

operator=(

const

char

* a)

strcpy

(p,a)

; size= len;

return

*this

;//返回引用物件

}

建立複製函式——方便以後重構呼叫

void

duplicate

(const mystring & s)

//若不重新分配空間,則需要清空p,再進行duplicate

strcpy

(p,s.p)

; size = s.size;

}

複製函式

mystring

(const mystring &a)

:size(0

),p(

newchar[1

])

重構=,引數為ms,用引用可以節省複製的空間

返回引用

同型別=函式需要判斷左右指標是否相同!

mystring &

operator=(

const mystring &a)

重構<,==,>,返回bool值

bool

operator

<

(const mystring &a)

const

bool

operator==(

const mystring &a)

const

bool

operator

>

(mystring &a)

const

重構 + 號,引數為ms的引用,節省空間

無需返回引用

物件+物件,故加號左邊返回物件即可,

物件的引用=物件,故等號左邊需返回引用

mystring operator+(

const mystring &a)

重構 +=

需返回引用

mystring &

operator+=

(const mystring &a)

重構【】

返回值需要被賦值,故需返回引用;

char

&operator

(int n)

const

//?

重構()

mystring  operator()

(int start,

int len)

const

析構函式

~

mystring()

友元函式,重構cout<<;

因為要連續<<,故返回cout的引用;

返回cout的引用,既可以繼續實現cout的功能

friend ostream &

operator

<<

(ostream & o,

const mystring & a)

友元函式,重構char * + ms;

friend mystring operator+(

const

char

*a ,

const mystring &t)

關於何時返回引用,何時返回物件,可參考:

C 介面的繼承

c 中,類繼承介面,和介面繼承介面不同 public inte ce baseinrte ce 類的繼承 class baseclass baseinrte ce 必須顯示實現介面的方法 介面的繼承 inte ce myinte ce baseinrte ce class newclass base...

C 介面 介面的繼承

類之間可以繼承,和類一樣,介面也允許繼承。c 中介面可以多繼承,介面之間可以互相繼承和多繼承。普通類和抽象類可以繼承介面。乙個類可以同時繼承乙個類和多個介面,但是介面不能繼承類。假如你是一名在職學習的學生,你就具有雙重身份。乙個身份是學生,必須完成學習任務,另一身份是職員,必須完成工作任務。進一步說...

C 虛基類繼承與介面的區別

類 定義新的資料型別以及這些新的資料型別進行相互操作的方法 定義方式 class cat class cat object c 中所有的類都是預設由object類派生來的,顯示指定或者省略效果是一樣的,所以上面的兩個例子是完全相同的。c 中類包括 抽象類 密封類 非抽象類 abstract 表示修飾...