程序最美(寻路)

你还在坚持练习你的技术吗?运动员天天训练,音乐家也会演练更难的曲章。你呢?

随笔分类 -  程序语言

《Objective-C编程》部分示例
摘要:《Objective-C编程》部分示例 最近在看《Objective-C编程》顺带实现了书中部分示例代码。如果感兴趣可以自行 下载(点我)。 通过本书大致了解了Objective-C这门程序设计语言。下一步主要是学习iOS相关开发。《Objective-C编程》中也少量介绍了一些回调机制:动作-目标对、辅助对象、通告等,还有协议相关内容,另外还有MVC设计模式等。对于iOS开发这些基础理论理解的还是不够透彻。下一步学习《iOS编程》,希望能早日做出一款实现自己的idea的iOS APP。 阅读全文

posted @ 2014-04-11 14:12 unixfy 阅读(422) 评论(1) 推荐(1)

结构体的赋值
摘要:结构体的赋值 1.指针的赋值 区分对指针本身赋值和对指针指向的空间进行赋值。 2.数组的赋值 不能对数组名进行赋值,对数组的赋值实质上是数组中元素一个一个的拷贝。 3.结构体的赋值 结构体中的指针 结构体中含有指针时,对结构体赋值类似于指针的赋值,只是浅赋值,如果想深赋值,还需要额外处理。 结构体中的数组 结构体含有数组时,对结构体进行赋值,可以实现数组的直接赋值,而外部的数组不能进行直接赋值,而是一个一个的拷贝。 结构体的直接赋值,实质上是对结构体的完全拷贝,不管结构体中有指针还是数组,拷贝的内容都是结构体本身,也就是说结构体中有指针时,拷贝的是指针本身;结构体中有数组时,拷贝的是数组。 对 阅读全文

posted @ 2013-12-24 20:22 unixfy 阅读(9385) 评论(0) 推荐(1)

基于面向对象的字符图像设计
摘要:基于面向对象的字符图像设计 ——《C++沉思录》第10章 一个课堂练习的分析(下) 发表一下个人看法。面向对象的一大特点就是提供了句柄,句柄的的作用一是隐藏了具体的继承层次细节,二是实现自动管理内存,省去客户端管理内存的烦恼。 之前《字符图像》介绍了一个字符图像的设计。面向对象具有数据抽象、封装、动态绑定等特性,下面我们采用面向对象的思想来重新设计字符图像。 具体细节详见代码和注释。// 基于面向对象的字符图像设计#include using namespace std;// 前置声明,因为Picture中需要定义P_Node*指针class P_Node;// 定义句柄类(代理)class 阅读全文

posted @ 2013-12-08 15:06 unixfy 阅读(590) 评论(0) 推荐(0)

字符图像
摘要:字符图像 ——《C++沉思录》第9章 一个课堂练习的分析(上) 设计一个字符图像,用字符代替像素,实现的基本操作有加边框、将两个图像横排、竖排等。然后再对其进行一些扩展:横排下边对齐、竖排右边对齐、将重载运算符封装、去边框处理等。 具体细节详见代码和注释。// 字符图像#include #include using namespace std;// 图像类class Picture{private: int height; // 高 int width; // 宽 char* data; // 可用string代替 int isframe; // 标示... 阅读全文

posted @ 2013-12-07 15:22 unixfy 阅读(665) 评论(0) 推荐(0)

基于面向对象的表达式实现
摘要:基于面向对象的表达式实现 ——《C++沉思录》第8章 一个面向对象的程序范例 本文我们介绍一个基于面向对象的表达式实现,并对其扩展。面向对象有三个基本要素:数据抽象(封装)、继承、动态绑定(多态)。这个程序可以很好的说明这三个特性,以及说明面向对象可以很好的使得程序可维护、更灵活、易扩展。 我们给出以下表达式:(-5)*(3+4) 其表达式树为: 1.初步实现 我们定义节点类,节点指向节点的边我们用指针表示。具体实现相见代码和注释。// 基于面向对象的表达式简单实现#include #include using namespace std;// 定义节点抽象基类class Expr_Nod.. 阅读全文

posted @ 2013-12-06 19:40 unixfy 阅读(524) 评论(0) 推荐(0)

类作为其自身成员函数参数时的类型
摘要:类作为其自身成员函数参数时的类型 类作为其自身成员函数参数时可以有三种情形: 1.引用,包含const和非const引用 2.指针 3.值类型 在做类内部的成员函数参数时,编译器允许使用值类型,也就是说这时类已定义完毕。 对于其他类,如果只有声明没有定义,那么只能是引用和指针类型。 代码如下:#include using namespace std;class T{private: int n;public: T(); T(int); T(int, T); // 这里参数的类型可以是类自身的值类型,不仅仅是引用或指针类型 //T(int, const T&) ... 阅读全文

posted @ 2013-12-06 19:32 unixfy 阅读(641) 评论(0) 推荐(0)

句柄类的实现:分割引用计数和原数据
摘要:句柄类的实现:分割引用计数和原数据 ——《C++沉思录》第7章 句柄:第二部分 《句柄类》中,介绍了一种句柄的简单实现,其基本结构就是定义了三个类:Point类、Handle类、UPoint类。其中Point为实际的原数据类,Handle为句柄类,UPoint为实际操作的数据类,其成员除了Point的一个对象外还有个int型的技术。 这里我们先将UPoint中的两个成员分割,之后再将int型技术进行封装成一个标准的引用技术类UseCount。 1.Point和int 删除UPoint类,并将Handle中的UPoint* up指针删除,添加Point和int指针。#include using 阅读全文

posted @ 2013-12-05 19:57 unixfy 阅读(532) 评论(0) 推荐(0)

句柄类
摘要:句柄类 ——《C++沉思录》第六章 句柄:第一部分 三个类: Point:主体类,表示实际的数据 Handle:句柄类,用来引用代理主体类 UPoint:对Point的封装,增加了一个use count成员,用来记录主体类对象被引用代理的次数。该类完全可以省略,但是添加此类的好处是更便于管理。 对Handle的拷贝构造函数和赋值运算符的实现是通过对UPoint对象的use count修改来完成的。Handle中有两个写函数,有两种实现方式:指针语义和值语义,这里涉及了一项技术称作写时赋值(copy on write)。 具体代码如下:// 句柄类#include using namespace 阅读全文

posted @ 2013-12-02 12:49 unixfy 阅读(482) 评论(0) 推荐(0)

代理类
摘要:代理类 (好久没写了,这段时间更迷茫了,不知道该做些什么。) ——《C++沉思录》第五章 代理类#include using namespace std;// 基类class Vehicle{private:public: Vehicle() {} virtual ~Vehicle() {} virtual double weight() const = 0; virtual void start() = 0; virtual Vehicle* copy() const = 0;};// 派生类class Truck : public Vehic... 阅读全文

posted @ 2013-11-18 01:38 unixfy 阅读(336) 评论(0) 推荐(0)

设计一个追踪类
摘要:设计一个追踪类——本文来自于《C++沉思录》中的例子。 用C++设计思想制作一个追踪类,实现功能: 1.基本的追踪 2.追踪开关 3.对于输出信息指定输出文件 程序如下:// 追踪类#include #include #include using namespace std;class MyTrace{private: bool ok_; FILE* f_;public: MyTrace() : ok_(true), f_(stdout) {} MyTrace(FILE* const f) : ok_(true), f_(f) {} void Print(con... 阅读全文

posted @ 2013-10-24 22:27 unixfy 阅读(245) 评论(0) 推荐(0)

两个数交换的讨论
摘要:两个数交换的讨论 C语言课中,两个数交换的程序必定会涉及,尤其是在讲解如何传参时。这里我们重点讨论一下两个数交换有哪几种方式,以及其原理是什么。 首先,我们给出几种两个数交换的代码,然后逐一讨论:#include #include using namespace std;void swap1(int& a, int& b){ int t = a; a = b; b = t;}void swap2(int& a, int& b){ a = a + b; b = a - b; a = a - b;}void swap3(int& a, int& b) 阅读全文

posted @ 2013-08-30 13:33 unixfy 阅读(301) 评论(0) 推荐(0)

封装的意义
摘要:封装的意义前面《组合序列、排列序列的生成实现》中,我们在最后讨论了如何对组合序列生成函数、排列序列生成函数进行封装,组合序列生成函数定义如下:void comb(const vector& arr, int beg, int m, vector >& coms, vector& tmp, int& total){ if (m > arr.size() - beg) { return; } if (m == 0) { coms.push_back(tmp); ++total; } else { ... 阅读全文

posted @ 2013-06-30 22:45 unixfy 阅读(786) 评论(0) 推荐(0)

导航