描述
程式填空,輸出指定結果
#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 表示修飾...