Function Overloading & Default Arguments(Chapter 7 of Thinking in C++)

本文介绍了一个自定义的内存管理类Mem的实现,该类提供了动态内存分配、释放及大小查询等功能。同时,通过一个字符串类MyString的实例演示了如何使用Mem类进行内存管理,包括字符串的构造、拼接和打印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ExpandedBlockStart.gifMem.h
 1 #ifndef MEM_H
 2 #define MEM_H
 3 typedef unsigned char byte;
 4 
 5 class Mem
 6 {
 7     byte* mem;
 8     int size;
 9     void ensureMinSize(int minSize);
10     public:
11         Mem();
12         Mem(int sz);
13         ~Mem();
14         int msize();
15         byte* pointer();
16         byte* pointer(int minSize);
17 };
18 #endif

 

 

ExpandedBlockStart.gifMem.cpp
 1 #include "Mem.h"
 2 #include <cstring>
 3 using namespace std;
 4 
 5 Mem::Mem()
 6 {
 7     mem = 0;
 8     size = 0;
 9 }
10 
11 Mem::Mem(int sz)
12 {
13     mem = 0;
14     size = 0;
15     ensureMinSize(sz);
16 }
17 
18 Mem::~Mem()
19 {
20     delete []mem;
21 }
22 
23 int Mem::msize()
24 {
25     return size;
26 }
27 
28 void Mem::ensureMinSize(int minSize)
29 {
30     if(size < minSize)
31     {
32         byte* newmem = new byte[minSize];
33         memset(newmem+size, 0, minSize - size);
34         memcpy(newmem, mem, size);
35 
36         delete []mem;
37         mem = newmem;
38         size = minSize;
39     }
40 }
41 
42 byte* Mem::pointer()
43 {
44     return mem;
45 }
46 
47 byte* Mem::pointer(int memSize)
48 {
49     ensureMinSize(memSize);
50     return mem;
51 }

 

 

ExpandedBlockStart.gifMemTest.cpp
 1 #include "Mem.h"
 2 #include <cstring>
 3 #include <iostream>
 4 using namespace std;
 5 
 6 class MyString
 7 {
 8     Mem* buf;
 9     public:
10         MyString();
11         MyString(char* str);
12         ~MyString();
13         void concat(char* str);
14         void print(ostream& os);
15 };
16 
17 MyString::MyString()
18 {
19     buf = 0;
20 }
21 
22 MyString::MyString(char* str)
23 {
24     buf = new Mem(strlen(str) + 1);
25     strcpy((char*)buf->pointer(), str);
26 }
27 
28 void MyString::concat(char* str)
29 {
30     if(!buf)
31     {
32         buf = new Mem;
33     }
34 
35     strcat((char*)buf->pointer(buf->msize() + strlen(str) + 1), str);
36 }
37 
38 void MyString::print(ostream& os)
39 {
40     if(!buf)
41     {
42         return;
43     }
44     os << buf->pointer() << endl;
45 }
46 
47 MyString::~MyString()
48 {
49     delete []buf;
50 }
51 
52 int main()
53 {
54     MyString s("My test string");
55     s.print(cout);
56     s.concat(" some additional stuff");
57     s.print(cout);
58     MyString s2;
59     s2.concat("Using default constructor");
60     s2.print(cout);
61 
62     cin.get();
63 } 

转载于:https://www.cnblogs.com/zhtf2014/archive/2010/11/12/1876074.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值