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

C++专题(三)

时间:2015-12-11 06:49:36      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:

16.使用this指针复制数据.

头文件:

技术分享
 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class Obj
 6 {
 7     int a, b;
 8 
 9 public:
10     Obj(int x = 0, int y = 0)
11     {
12         a = x;
13         b = y;
14     }
15 
16     void copy(Obj &);
17     void display()
18     {
19         cout << "a = " << a << ", b = " << b << endl;
20     }
21 };
22 
23 void Obj::copy(Obj &aObj)
24 {
25     if (this == &aObj)
26         return;
27     this->a = aObj.a;
28     this->b = aObj.b;
29 }
obj.h

源文件:

技术分享
 1 #include "obj.h"
 2 
 3 void main(void)
 4 {
 5     Obj x1(22, 25), x2(33, 46);
 6 
 7     cout << "x1: ";
 8     x1.display();
 9     cout << "x2: ";
10     x2.display();
11     x1.copy(x2);
12     cout << "x1: ";
13     x1.display();
14 }
View Code

结果:

x1: a = 22, b = 25

x2: a = 33, b = 46

x1: a = 33, b = 46

 

Mark:

  当一个对象调用成员函数时,系统先将该对象的地址赋给this指针,然后调用成员函数,成员函数对成员数据进行操作时,隐含使用了this指针.

 

17.完整实现str类的例子.

头文件:

技术分享
 1 #ifndef _STR_H
 2 #define _STR_H
 3 
 4 #include <iostream>
 5 #include <cstring>
 6 
 7 using namespace std;
 8 
 9 class str
10 {
11 private:
12     char *st;
13 
14 public:
15     str(char *s);
16     str(str &s);
17     str & operator = (str &a);
18     str & operator = (char *s);
19     void print()
20     {
21         cout << st << endl;
22     }
23 
24     ~str()
25     {
26         delete st;
27     }
28 };
29 
30 str::str(char *s)
31 {
32     st = new char[strlen(s) + 1];
33     strcpy(st, s);
34 }
35 
36 str::str(str &a)
37 {
38     st = new char[strlen(a.st) + 1];
39     strcpy(st, a.st);
40 }
41 
42 str & str::operator = (str &a)
43 {
44     if (this == &a)
45         return *this;
46     delete st;
47     st = new char[strlen(a.st) + 1];
48     strcpy(st, a.st);
49     return *this;
50 }
51 
52 str & str::operator = (char *s)
53 {
54     delete st;
55     st = new char[strlen(s) + 1];
56     strcpy(st, s);
57     return *this;
58 }
59 
60 #endif
str.h

源文件:

技术分享
 1 #include "str.h"
 2 
 3 void main(void)
 4 {
 5     str s1("We"), s2("They"), s3(s1);
 6 
 7     s1.print();
 8     s2.print();
 9     s3.print();
10 
11     s2 = s1 = s3;
12     s3 = "Go home!";
13     s3 = s3;
14     s1.print();
15     s2.print();
16     s3.print();
17 }
View Code

结果:

We

They

We

We

We

Go home!

 

18.求4个数的最大值的类模板程序.

头文件:

技术分享
 1 #ifndef _MAX4_H
 2 #define _MAX4_H
 3 
 4 #include <iostream>
 5 
 6 using namespace std;
 7 
 8 template <class T>
 9 class Max4
10 {
11     T a, b, c, d;
12     T Max(T a, T b)
13     {
14         return (a > b) ? a : b;
15     }
16 
17 public:
18     Max4(T, T, T, T);
19     T Max(void);
20 };
21 
22 template <class T>
23 Max4<T>::Max4(T x1, T x2, T x3, T x4):a(x1),b(x2),c(x3),d(x4) 
24 {
25 }
26 
27 template <class T>
28 T Max4<T>::Max(void)
29 {
30     return Max(Max(a, b), Max(c, d));
31 }
32 
33 #endif
max4.h

源文件:

技术分享
1 #include "max4.h"
2 
3 void main(void)
4 {
5     Max4<char> C(W, w, a, A);
6     Max4<int> A(-25, -67, -66, -256);
7     Max4<double> B(1.25, 4.3, -8.6, 3.5);
8     cout << C.Max() << " " << A.Max() << " " << B.Max() << endl;
9 }
View Code

结果:

w -25 4.3

 

19.演示对4个数字求和的类模板程序.

头文件:

技术分享
 1 #ifndef _SUM_H
 2 #define _SUM_H
 3 
 4 template <class T, int size = 4>
 5 class Sum
 6 {
 7 private:
 8     T m[size];
 9 
10 public:
11     Sum(T a, T b, T c, T d)
12     {
13         m[0] = a;
14         m[1] = b;
15         m[2] = c;
16         m[3] = d;
17     }
18 
19     T S()
20     {
21         return m[0] + m[1] + m[2] + m[3];
22     }
23 };
24 
25 #endif
sum.h

源文件:

技术分享
 1 #include <iostream>
 2 #include "sum.h"
 3 
 4 using namespace std;
 5 
 6 void main(void)
 7 {
 8     Sum<int, 4> num1(-23, 5, 8, -2);
 9     Sum<float, 4> f1(3.5f, -8.5f, 8.8f, 9.7f);
10     Sum<double, 4> d1(355.4, 253.8, 456.7, -67.8);
11     Sum<char, 4> c1(W, -2, -1, -1);            //字符减,等效于‘W‘,‘U‘,‘T‘,‘S‘
12     cout << num1.S() << ", " << f1.S() << ", " << d1.S() << ", " << c1.S() << endl;
13 }
View Code

结果:

-12, 13.5, 998.1, S

 

20.使用缺省内联函数实现单一继承

头文件:

技术分享
 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class Point
 6 {
 7 private:
 8     int X, Y;
 9 
10 public:
11     Point(int a, int b)
12     {
13         X = a;
14         Y = b;
15         cout << "Point..." << endl;
16     }
17 
18     void Showxy()
19     {
20         cout << "X = " << X << ", Y = " << Y << endl;
21     }
22 
23     ~Point()
24     {
25         cout << "Delete Point" << endl;
26     }
27 };
28 
29 class Rectangle:public Point
30 {
31 private:
32     int H, W;
33 
34 public:
35     Rectangle(int a, int b, int h, int w):Point(a, b)
36     {
37         H = h;
38         W = w;
39         cout << "Rectangle..." << endl;
40     }
41 
42     void Show()
43     {
44         cout << "H = " << H << ", W = " << W << endl;
45     }
46 
47     ~Rectangle()
48     {
49         cout << "Delete Rectangle" << endl;
50     }
51 };
rectangle.h

源文件:

技术分享
1 #include "rectangle.h"
2 
3 void main(void)
4 {
5     Rectangle r1(3, 4, 5, 6);
6     r1.Showxy();
7     r1.Show();
8 }
View Code

结果:

Point...

Rectangle...

X = 3, Y = 4

H = 5, W = 6

Delete Rectangle

Delete Point

 

Mark:

  当定义派生类的一个对象时,首先调用基类的构造函数,对基类成员进行初始化,然后执行派生类的构造函数,如果某个基类仍是一个派生类,则这个过程递归进行.

 

C++专题(三)

标签:

原文地址:http://www.cnblogs.com/zero-jh/p/5037875.html

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