码迷,mamicode.com
首页 > 编程语言 > 详细

C++程序设计_第9章_运算符重载及流类库

时间:2016-06-18 00:03:00      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:

 

例9.1

完整实现str类的例子。

 

 1 #define _CRT_SECURE_NO_WARNINGS
 2 
 3 #include <iostream>
 4 #include <string>
 5 
 6 using namespace std;
 7 
 8 class str
 9 {
10 private:
11     char *st;
12 public:
13     str(char *s);//使用字符指针的构造函数
14     str(str& s);//使用对象引用的构造函数
15     str& operator=(str& a);//重载使用对象引用的赋值运算符
16     str& operator=(char *s);//重载使用指针的赋值运算符
17     void print()
18     {
19         cout << st << endl;//输出字符串
20     }
21     ~str()
22     {
23         delete st;
24     }
25 };
26 
27 str::str(char *s)
28 {
29     st = new char[strlen(s) + 1];//为st申请内存
30     strcpy(st, s);//将字符串s复制到内存区st
31 }
32 
33 str::str(str& a)
34 {
35     st = new char[strlen(a.st) + 1];//为st申请内存
36     strcpy(st, a.st);//将对象a的字符串复制到内存区st
37 }
38 
39 str& str::operator=(str& a)
40 {
41     if (this == &a)//防止a=a这样的赋值
42     {
43         return *this;//a=a,退出
44     }
45     delete st;//不是自身,先释放内存空间
46     st = new char[strlen(a.st) + 1];//重新申请内测
47     strcpy(st, a.st);//将对象a的字符串复制到申请的内存区
48     return *this;//返回this指针指向的对象
49 }
50 
51 str& str::operator=(char *s)
52 {
53     delete st;//是字符串直接赋值,先释放内存空间
54     st = new char[strlen(s) + 1];//重新申请内存
55     strcpy(st, s);//将字符串s复制到内存区st
56     return *this;
57 }
58 
59 void main()
60 {
61     str s1("We"), s2("They"), s3(s1);//调用构造函数和复制构造函数
62 
63     s1.print();
64     s2.print();
65     s3.print();
66 
67     s2 = s1 = s3;//调用赋值操作符
68     s3 = "Go home!";//调用字符串赋值操作符
69     s3 = s3;//调用赋值操作符但不进行赋值操作
70 
71     s1.print();
72     s2.print();
73     s3.print();
74 
75     system("pause");
76 };

 

例9.2 

 

123

C++程序设计_第9章_运算符重载及流类库

标签:

原文地址:http://www.cnblogs.com/denggelin/p/5595367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!