C++类的运用 和 三大函数
2016-01-04 19:17
183 查看
在《数据结构与算法分析C++描述》一书中给出了三段代码,简单描述了C++类的接口、实现、与调用:
新建文件实现接口:
并使用该类:
在多数情况下,都可以采用编译器提供的默认函数:析构函数、复制构造函数和operator=。有些时候却不行。试想一个含有指针成员的C++类,在用对象B对对象A进行初始化时,按照默认的复制方法,B的指针成员的值赋值给了A的指针成员:
它们包含的指针都指向了同一个对象,这被称为是浅复制。一般我们期望得到的是对整个对象进行克隆的深复制。
所以,当一个类含有的数据成员为指针并且深复制很重要的时候,一般的做法就是自己实现三大函数。
#ifndef INTCELL_H_INCLUDED #define INTCELL_H_INCLUDED class IntCell { public : explicit IntCell( int initialValue = 0 ); int read() const; void write( int x ); private : int storedValue; }; #endif // INTCELL_H_INCLUDED
新建文件实现接口:
#include "IntCell.h" IntCell::IntCell( int initialValue ) : storedValue( initialValue ) { } int IntCell::read() const { return storedValue; } void IntCell::write( int x ) { storedValue = x; }
并使用该类:
#include <iostream> #include "IntCell.h" #include "IntCell.cpp" using namespace std; int main( void ) { IntCell m; m.write( 5 ); cout << "Cell contents:" << m.read() << endl; return 0; }
在多数情况下,都可以采用编译器提供的默认函数:析构函数、复制构造函数和operator=。有些时候却不行。试想一个含有指针成员的C++类,在用对象B对对象A进行初始化时,按照默认的复制方法,B的指针成员的值赋值给了A的指针成员:
它们包含的指针都指向了同一个对象,这被称为是浅复制。一般我们期望得到的是对整个对象进行克隆的深复制。
所以,当一个类含有的数据成员为指针并且深复制很重要的时候,一般的做法就是自己实现三大函数。
相关文章推荐
- c语言键盘输入+中文字处理
- cmake:动态链接库(so)中静态链接tcmalloc(gperftools2.4)暨静态链接libstdc++
- c++一些位操作
- 【C++版】Face Alignment at 3000 FPS by Regressing Local Binary Features源码下载
- C++中#if #ifdef 的作用
- 【c/c++】类型转换函数(类型转换运算符重载函数)
- C++ 顺序栈类实现
- The C++ Standard Library --- A Tutorial Reference 读书笔记
- C++11 并发指南四(<future> 详解一 std::promise 介绍)
- 后现代的系统编程语言——C++
- C语言链表的概念
- 移动开发C++编程语言学习路线图
- 【c/c++】转换构造函数
- C/C++内存泄漏及检测
- c++中*与&的区别
- C语言获取时间的集中方法
- C++单链表
- c/c++获取当前的工作的路径
- 万年历程序--C++编写
- C语言概览