From 6fc20cd14bbbac214d245624508762e9e9b749bc Mon Sep 17 00:00:00 2001 From: Yan Feng Date: Mon, 4 Mar 2019 22:09:04 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E7=A8=8B=E5=BA=8F=E5=A1=AB=E7=A9=BA.c?= =?UTF-8?q?pp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...3\345\272\217\345\241\253\347\251\272.cpp" | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git "a/3.C++\347\250\213\345\272\217\350\256\276\350\256\241/week5/\347\274\226\347\250\213\347\273\203\344\271\240/\347\250\213\345\272\217\345\241\253\347\251\272.cpp" "b/3.C++\347\250\213\345\272\217\350\256\276\350\256\241/week5/\347\274\226\347\250\213\347\273\203\344\271\240/\347\250\213\345\272\217\345\241\253\347\251\272.cpp" index e69de29..6c2ed1c 100644 --- "a/3.C++\347\250\213\345\272\217\350\256\276\350\256\241/week5/\347\274\226\347\250\213\347\273\203\344\271\240/\347\250\213\345\272\217\345\241\253\347\251\272.cpp" +++ "b/3.C++\347\250\213\345\272\217\350\256\276\350\256\241/week5/\347\274\226\347\250\213\347\273\203\344\271\240/\347\250\213\345\272\217\345\241\253\347\251\272.cpp" @@ -0,0 +1,117 @@ +#include +#include +#include + +using namespace std; + +#include +#include +#include +#define qsort(a,b,c,d) myqsort(a,b,c,d) + +class MyString : public string +{ +public: + MyString() {}; + //1.0继承类继承父类所有的成员变量和成员函数,但不继承构造函数和析构函数 + //1.1继承类的无参构造函数,会隐式调用父类的无参构造函数 + MyString(const char * st) :string(st) {}; + //1.2继承类的有参构造函数,如果父类也有有参构造函数,则必须显示调用它 + //2.0这里的参数根据reference有两种选择,此处必须用const char*,"xxx"的类型是const char* + MyString(const MyString& s):string(s){} + //1.3继承类的复制构造函数必须要显示的调用父类的复制构造函数,不然就会默认调用父类的无参构造函数 + MyString operator +(MyString & op2) + { + string s1 = *this; + string s2 = op2; + string s = s1 + s2; + return *new MyString(s.c_str()); + } + MyString & operator +(const char * cs2) + { + string str1 = *this; + string s = str1 + cs2; + return *new MyString(s.c_str()); + } + + MyString & operator()(int s, int l) + { + string str = substr(s, l); + return *new MyString(str.c_str()); + } +}; + +void print_test(MyString s) +{ + cout << s << endl; +} + +int myqsort(MyString * ms,int size,int length,int (*f)(const void *,const void *)) +{ + vector vec; + + for (int i=0; i< size; i++) + vec.push_back(ms[i]); + + sort(vec.begin(), vec.end()); + + for (int i=0; i *s2) return 1; +} + +int main() +{ + MyString s1("abcd-"), s2, s3("efgh-"); + MyString s4(s1); + MyString SArray[4] = { "big","me","about","take" }; + //这里等号右边的赋值操作相当于调用了MyString的转换构造函数,其实就是单一非const classname&参数的构造函数可以直接接受参数类型的变量 + cout << "1. " << s1 << s2 << s3 << s4 << endl; + s4 = s3; + //3.0 operator=可以直接用string类里面的 + s3 = s1 + 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); + //myqsort(SArray, 4, sizeof(MyString), CompareString); + + for (int i = 0; i < 4; ++i) + cout << SArray[i] << endl; + cout << s1(0, 4) << endl; + cout << s1(5, 10) << endl; + return 0; +}