自由地使用C++,不要C
来源:互联网 发布:gameloft java 编辑:程序博客网 时间:2024/05/22 01:46
我理解的好的软件开发是自己日积月累地使用语言并且创建一个自己可以维护(或者一个团队可以维护)的库,并且完善它,然后其他的应用都在这个库的基础上发展起来。那么我们创建的应用都是自己可以控制和可以维护的。
一 对象 和 过程
C++ 和 C 的差别是 C++ 可以把一些相似的东西放在一起,也就是抽象出一个对象,哪些是属性,哪些是操作的函数。
如下一些C 的函数:
strcpy
strcat
strcmp
...
这些都是字符串的操作,我们可以将它们归为一个字符串的对象,于是 在STL 中出现了 string 对象,在 MFC 中出现了CString 对象。这样我们使用的时候可以不必要要记忆 strcpy,strcat ,strcmp ... 的函数了,而我们使用可视化的开发工具,借助VC 助手(我在windows 下开发,可能 linux 下 都 没有吧),写一个与字符串有关的程序就很简单了,我们只需要记住一个对象,知道这个对象的作用就可以了。
二 多态性
看了COM 书籍之后,受到了一些启发。COM 其实也就是导出一些接口,而不是类,说穿了就是给你一个函数列表的指针,而函数的个数是已知的,所以这个接口的大小(使用sizeof(className)),应该为 sizeof(void*) ,所以在接口实现的类中我们可以尽情的更改我们的代码,比如在实现类中增加函数或者一个属性等等,发布出来的程序只要接口不变就不用进行重新编译就可以发布。而导出类是必须要重新编译,因为导出类的 sizeof(className)变了。
当我们定义了一个接口:
class ISocket
{
public:
BOOL Send()=0;
BOOL Recv()=0;
BOOL Accept()=0;
...
};
我们可以类似COM 导出一个 接口
ISocket *CreateSocket();
void ReleaseSocket();
因为是接口我们可以重新实现或者修改;如果我们使用C开发的话,我们只有去记忆一些函数的库,如果出现问题的话,我们只能把代码重写一遍,而使用接口方式可以保留原来的代码,而派生一个新类来搞定。
在 Windows Media 系列的SDK 中,我们 经常看到 类似 Callback 的 接口 ,如下
IReaderCallback 这样的接口,其实只是定义了一些接口,来集中处理完成通知,或者错误通知,而我们只需要,自己在一个已知的类中派生即可(在C中接收通知要设置一个类似callback 函数的 ,又是一堆的函数).
举个例子:
我们网络通讯的时候,接收到数据以后,要在UI上显示,我们和UI 的信息交换要么使用消息,要么把UI 的指针传送给接收到消息的线程,这里我想到的简捷的方法是
从 class CMainDlg:public CDialog,public INetCallback
{};
然后把 传送一个 INetCallback 指针给 接收到消息的线程。如果其他的地方需要实现Callback ,只需要派生一下。我相信要比C 中 的 简捷。
三 模板
模板是C++中新的特性,如果我们对它不了解的话,或者看最后生成的汇编代码也看不大明白的话,我们可以不使用。
总之 C++ 面向对象的方法的确要比面向过程先进得多,要降低程序员的工作量(代码重用,库的发布和使用)。而且引申出来的COM思想或者接口的思想也是相当的灵活,方便,易于管理。让自己开发的程序其他的人也便于看懂。
一 对象 和 过程
C++ 和 C 的差别是 C++ 可以把一些相似的东西放在一起,也就是抽象出一个对象,哪些是属性,哪些是操作的函数。
如下一些C 的函数:
strcpy
strcat
strcmp
...
这些都是字符串的操作,我们可以将它们归为一个字符串的对象,于是 在STL 中出现了 string 对象,在 MFC 中出现了CString 对象。这样我们使用的时候可以不必要要记忆 strcpy,strcat ,strcmp ... 的函数了,而我们使用可视化的开发工具,借助VC 助手(我在windows 下开发,可能 linux 下 都 没有吧),写一个与字符串有关的程序就很简单了,我们只需要记住一个对象,知道这个对象的作用就可以了。
二 多态性
看了COM 书籍之后,受到了一些启发。COM 其实也就是导出一些接口,而不是类,说穿了就是给你一个函数列表的指针,而函数的个数是已知的,所以这个接口的大小(使用sizeof(className)),应该为 sizeof(void*) ,所以在接口实现的类中我们可以尽情的更改我们的代码,比如在实现类中增加函数或者一个属性等等,发布出来的程序只要接口不变就不用进行重新编译就可以发布。而导出类是必须要重新编译,因为导出类的 sizeof(className)变了。
当我们定义了一个接口:
class ISocket
{
public:
BOOL Send()=0;
BOOL Recv()=0;
BOOL Accept()=0;
...
};
我们可以类似COM 导出一个 接口
ISocket *CreateSocket();
void ReleaseSocket();
因为是接口我们可以重新实现或者修改;如果我们使用C开发的话,我们只有去记忆一些函数的库,如果出现问题的话,我们只能把代码重写一遍,而使用接口方式可以保留原来的代码,而派生一个新类来搞定。
在 Windows Media 系列的SDK 中,我们 经常看到 类似 Callback 的 接口 ,如下
IReaderCallback 这样的接口,其实只是定义了一些接口,来集中处理完成通知,或者错误通知,而我们只需要,自己在一个已知的类中派生即可(在C中接收通知要设置一个类似callback 函数的 ,又是一堆的函数).
举个例子:
我们网络通讯的时候,接收到数据以后,要在UI上显示,我们和UI 的信息交换要么使用消息,要么把UI 的指针传送给接收到消息的线程,这里我想到的简捷的方法是
从 class CMainDlg:public CDialog,public INetCallback
{};
然后把 传送一个 INetCallback 指针给 接收到消息的线程。如果其他的地方需要实现Callback ,只需要派生一下。我相信要比C 中 的 简捷。
三 模板
模板是C++中新的特性,如果我们对它不了解的话,或者看最后生成的汇编代码也看不大明白的话,我们可以不使用。
总之 C++ 面向对象的方法的确要比面向过程先进得多,要降低程序员的工作量(代码重用,库的发布和使用)。而且引申出来的COM思想或者接口的思想也是相当的灵活,方便,易于管理。让自己开发的程序其他的人也便于看懂。
- 自由地使用C++,不要C
- AS中愉快地使用 C/C++
- Problem C: 小球自由下落
- 不要忽视C语言
- 使用Object-c类实现简单地加减乘除运算
- 《Effective C++》 40:明智而审慎地使用多重继承
- C语言(如何优雅地使用字符串)
- 在 Android Studio 2.2 中愉快地使用 C/C++
- 在 Android Studio 2.2 中愉快地使用 C/C++
- 在 Android Studio 2.2 中愉快地使用 C/C++
- 在 Android Studio 2.2 中愉快地使用 C/C++
- 在 Android Studio 2.2 中愉快地使用 C/C++
- 如何优雅地使用c语言编写爬虫
- 在 Android Studio 2.2 中愉快地使用 C/C++
- 使用okhttp和stetho自由地测试网络请求
- 不要对不同类型使用三元运算符[C++]
- 自由地飞
- 疯狂地学习C语言
- 汉字编码问题
- 搭建JSTL运行环境
- java时间格式大全
- 甜蜜的烦恼
- 关于DNS的一些基础知识
- 自由地使用C++,不要C
- ARM学习笔记---linux基本命令
- 控制者之可悲
- web项目经理手册-项目经理需要铭记在心的话
- [转]OpenSSL简介
- hadoop 的RMI实现分析。(请参考hadoop RMI 的源码)
- Windows Server 2003 功能包
- 治安疏
- 流媒体技术资料