C++沉思录笔记 —— 第二十四章:一个库接口设计实例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++沉思录笔记 —— 第二十四章:一个库接口设计实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1830字,纯文字阅读大概需要3分钟。
内容图文
如下:一个检查文件系统目录的内容的例子,使用C语言、C库。
#include <stdio.h>
#include <dirent.h>
int main(int argc, char const *argv[])
{
DIR* dp = opendir(".");
struct dirent* d;
while(d = readdir(dp))
printf("%s\n", d->d_name);
closedir(dp);
return 0;
}
此段代码的好处与坏处都在于指针。代码简洁优美,适合阅读,但存在安全隐患。空指针如何处理?库分配的内存块(指针指向)何时释放?
#include <iostream>
#include <dirent.h>
using namespace std;
class Dir_offset{
friend class Dir;
private:
long l;
Dir_offset(long n) { l = n; }
long tell_dir() { return l; }
};
class Dir{
public:
Dir(const char*);
~Dir();
int read(dirent&);
void seek(Dir_offset);
Dir_offset tell() const;
private:
DIR* dp;
Dir(const Dir&);
Dir& operator=(const Dir&);
};
Dir::Dir(const char* file): dp(opendir(file)) {}
Dir::~Dir(){
if(dp)
closedir(dp);
}
void Dir::seek(Dir_offset pos){
long l = pos.tell_dir();
if(dp)
seekdir(dp, l);
}
Dir_offset Dir::tell() const{
if(dp)
return telldir(dp);
return -1;
}
int Dir::read(dirent& d){
if(dp){
dirent* r = readdir(dp);
if(r){
d = *r;
return 1;
}
}
throw("dirent isn't exist.\n");
return 0;
}
int main(int argc, char const *argv[])
{
Dir dp("C:\\");
dirent d;
try{
while(dp.read(d))
cout << d.d_name <<endl;
}catch (const char* msg){
cerr << msg << endl;
}
return 0;
}
此段代码main函数同样简洁优美,适合阅读。更重要的是接口设计被优化了。
Dir dp("C:\\"); ---- 对象被创建,但是DIR* dp是对象的私有数据,被隐藏管理了,无法直接访问,这就是C++对指针的管理。
~Dir() 对分配的内存做了释放管理。类消亡了,内存自动释放。
所有指针管理的问题做了处理,对外的接口是类以及其成员函数。
?内容总结
以上是互联网集市为您收集整理的C++沉思录笔记 —— 第二十四章:一个库接口设计实例全部内容,希望文章能够帮你解决C++沉思录笔记 —— 第二十四章:一个库接口设计实例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。