C++专题(三)

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 }

结果:

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 }

结果:

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 }

结果:

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 }

结果:

-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 }

结果:

Point...

Rectangle...

X = 3, Y = 4

H = 5, W = 6

Delete Rectangle

Delete Point

Mark:

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

时间: 2024-12-13 18:20:23

C++专题(三)的相关文章

分析Linux磁盘管理与文件系统专题三

1.前言 紧接着我的上一篇博客进行磁盘管理操作: http://zhangfengzhe.blog.51cto.com/8855103/1430531 我们已经对磁盘进行了分区,信息如下: [[email protected] ~]# fdisk -l /dev/sdb Disk /dev/sdb: 1073 MB, 1073741824 bytes 255 heads, 63 sectors/track, 130 cylinders Units = cylinders of 16065 * 5

[C# 网络编程系列]专题三:自定义Web服务器

转自:http://www.cnblogs.com/zhili/archive/2012/08/23/2652460.html 前言: 经过前面的专题中对网络层协议和HTTP协议的简单介绍相信大家对网络中的协议有了大致的了解的, 本专题将针对HTTP协议定义一个Web服务器,我们平常浏览网页通过在浏览器中输入一个网址就可以看到我们想要的网页,这个过程中浏览器只是一个客户端,浏览器(应用层应用程序)通过HTTP协议把用户请求发送到服务端, 服务器接受到发送来的HTTP请求,然后对请求进行处理和响应

UI标签库专题三:JEECG智能开发平台 FormValidation(表单提交及验证标签)

?? 1. FormValidation(表单提交及验证标签) 1.1.  参数 属性名 类型 描述 是否必须 默认值 action string 表单提交路径 否 null formid string 表单唯一标示 是 formobj refresh boolean dialog为true时是否刷新父页面 否 true callback string 表单提交完成后的回调函数 否 null beforeSubmit string 表单提交前的处理函数 否 null btnsub string

搜索引擎算法研究专题三:聚集索引与非聚集索引介绍

搜索引擎算法研究专题三:聚集索引与非聚集索引介绍 聚集索引介绍 在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同.表只能包含一个聚集索引. 如果不是聚集索引,表中各行的物理顺序与键值的逻辑顺序不匹配.聚集索引比非聚集索引有更快的数据访问速度. 聚集索引通常可加快 UPDATE 和 DELETE 操作的速度,因为这两个操作需要读取大量的数据.创建或修改聚集索引可能要花很长时间,因为执行这两个操作时要在磁盘上对表的行进行重组. 可考虑将聚集索引用于: 1.包含数量有限的唯一值的列,如 s

[.NET领域驱动设计实战系列]专题三:前期准备之规约模式(Specification Pattern)

一.前言 在专题二中已经应用DDD和SOA的思想简单构建了一个网上书店的网站,接下来的专题中将会对该网站补充更多的DDD的内容.本专题作为一个准备专题,因为在后面一个专题中将会网上书店中的仓储实现引入规约模式.本专题将详细介绍了规约模式. 二.什么是规约模式 讲到规约模式,自然想到的是什么是规约模式呢?从名字上看,规约模式就是一个约束条件,我们在使用仓储进行查询的时候,这时候就会牵涉到很多查询条件,例如名字包含C#的书名等条件.这样就自然需要引入规约模式了.规约模式的作用可以自由组装业务逻辑元素

[Asp.net 开发系列之SignalR篇]专题三:使用SignalR实现聊天室的功能

一.引言 在前一篇文章中,我向大家介绍了如何实现实现端对端聊天的功能的,在这一篇文章中将像大家如何使用SignalR实现群聊这样的功能. 二.实现思路 要想实现群聊的功能,首先我们需要创建一个房间,然后每个在线用户可以加入这个房间里面进行群聊,我们可以为房间设置一个唯一的名字来作为标识.那SignalR类库里面是否有这样现有的方法呢?答案是肯定的. // IGroupManager接口提供如下方法 // 作用:将连接ID加入某个组 // Context.ConnectionId 连接ID,每个页

专题三--1017

题目 Many years ago , in Teddy's hometown there was a man who was called "Bone Collector". This man like to collect varies of bones , such as dog's , cow's , also he went to the grave -The bone collector had a big bag with a volume of V ,and along

专题三、ArrayList遍历方式以及效率比较

一.遍历方式 ArrayList支持三种遍历方式. 1.第一种,随机访问,它是通过索引值去遍历 由于ArrayList实现了RandomAccess接口,它支持通过索引值去随机访问元素. 代码如下: // 基本的forfor (int i = 0; i < size; i++){    value = list.get(i);} 2.第二种,foreach语句 foreach语句是java5的新特征之一,在遍历数组.集合方面,foreach为开发人员提供了极大的方便. 代码如下: for (In

[Python学习] 专题三.字符串的基础知识

        在Python中最重要的数据类型包括字符串.列表.元组和字典等.该篇主要讲述Python的字符串基础知识. 一.字符串基础         字符串指一有序的字符序列集合,用单引号.双引号.三重(单双均可)引号引起来.如: s1='www.csdn.net'   s2="www.csdn.net"   s3='''aaabbb''' 其中字符串又包括: 1.转义字符串 像C语言中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,pyth

专题三 Problem1013

题目大意: 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年初也生一头小母牛.输入正整数n,输出在第n年的时候,共有多少头母牛? 解题思路: 这道题目乍一看挺简单的,但是我在做的时候因为粗心大意就犯了一个致命性的错误.我先计算了当n=1,2,3,4的时候的母牛值,因为此时只有一头母牛在生产,所以此时母牛书f=1,2,3,4.然而当我继续计算n=5的时候,第一次忘记了最开始生的那一头母牛这一年也到了生产的年龄,忘了加这一头母牛的,改了这个错误之后,在计算n=6的时候忘了老母牛