易截截图软件、单文件、免安装、纯绿色、仅160KB

浅谈C与C++的设计与编程风格(二)

上次总结了C++(面向对象)设计的核心思想,并且例举了使用类模型来替代if和switch的一种较为典型的情况。下面想来谈谈C++在编码方面的特点。
在很多经典的C++教程中都有一个建议:应尽量使用户代码(库的使用者)看起来短小而简单。按照常识,简单的代码通常要比大段的代码好理解,而用户代码通常实现的是最上层的功能或者界面,它的不确定性更大,经验告诉我们,最容易出错的代码正是那些被频繁修改的代码!因此简单的用户代码是有好处的,在开发一个库时我们应尽量遵守这个建议。
C++有两个机制可以帮助我们实现这一点,一个是运算符重载,另一个就是模板。
C++的运算符重载机制非常强大,这里就举一个简单的例子。C语言中有一种对数组的特殊初始化方式,比如:int a[4] = {1,4,2,3}; 这样的语法非常清晰且容易让人理解,然而很可惜的是,这样的语法不能用于对数组的赋值,对数组的赋值必须使用一个循环操作,当这个数组中的内容不是按顺序排列时,对数组的赋值很可能会演变成一个非常复杂的过程。
但是在C++中,我们却可以利用重载运算符来实现一种相似的赋值语法,方法就是我们设计一个迭代器,并重载该迭代器的 , 运算符,然后再设计一个可以使用这个迭代器的数组类,并重载这个数组的=运算符,它们的代码大致会是这样:
// 一个重载了,运算符的迭代器类
class CCopyIterator
{
    int * m_piItem;
public:
    CCopyIterator(int in_aiItems[])
    {
        m_piItem = in_aiItems;
    };
    CCopyIterator & operator ,(int in_iVal)
    {
        *(m_piItem++) = in_iVal;
        return *this;
    }
};
//可以使用CCopyIterator赋值的数组
class CSmartArray
{
    int m_aiItems[100]; // 这里使用一个定长的数组是为了回避回收内存空间的问题,毕竟这不是我们要讨论的主要问题
public:
    CCopyIterator operator =(int in_iFirstVal)
    {
        CopyIterator rtn(m_aiItems);
        return (rtn, in_iFirstVal);
    }


相关文档:

用C写的3D迷宫

          Boss说,要看OpenGL,看了快一个月,总算出了个像样的东西,用C写了个3D迷宫,
虽然只有350行
       代码,不过边学边写,足足写了一周时间,还是小有成就感的,活活活!
         &n ......

C与C++中字符指针处理字符串

定义一个字符指针,其本质的处理方式是按字符数组处理的,在内存开辟一个字符数组用来存放字符串常量,这样必定会终止符。而这样的特性也仅对于字符指针变量。
在C语言中,通过数组名或者指针变量输出一个字符串,我理解为两个:字符串终止符的存在;以%s格式的输出方式。
char *p="I love china!";
   & ......

C++中extern “C”含义深层探索(在原作的基础上修改)


1.
引言
  C++
语言的创建初衷是“a
better C”
,但是这并不意味着C++
中类似C
语言的全局变量和函数所采用的编译和连接方式与C
语言完全相同。作为一种欲与C
兼容的语言,C++
保留了一部分过程 式语言的特点(被世人称为“
不彻底地面向对象”
),因而它可以定义不属于任何类的全局 ......

使用mex C生成MATLAB的股票数据分析接口

#include "mex.h"
#define DWORD long 
#define NUMBER_OF_STRUCTS (sizeof(friends)/sizeof(struct phonebook))
#define NUMBER_OF_FIELDS (sizeof(field_names)/sizeof(*field_names))
void mexFunction(int nlhs,
    mxArray * plhs[] , int nrhs,const mxArray * pahs[])
{
typedef struc ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号