西西河

主题:【原创】编程心得 -- 荆棘探兴

共:💬198 🌺258
全看树展主题 · 分页首页 上页
/ 14
下页 末页
家园 我更好相反...

问题一般是晚上解决, 白天我的效率太低...我正试图改变我的习惯...

家园 嘿嘿,老早老早的事情了

80年代。进入90年代后,再在PC上写程序,就是那该死的WINDOWS了!那时候的WINDOWS别提多烂了。除了一段时间在日本的NEC PC9801上写程序,还改过一些中断,模仿一下WINDOWS的感觉。

家园 是的

我家老爷子都快80岁了,他用计算机多半就是数值计算,大量的经济数据,对他来说,FORTRAN就是最好的刀!老爷子现在要学JAVA,没错,80岁的老头子学JAVA,我现在给他讲JAVA,嘿嘿,他那个30年的传统手段跟现在的面向对象的新方法那是真难对上号,对他来说就是革命。我这个革命的过程,在80年代末90年代初刚学C++的时候就痛苦过了,那时候国内可真是没有什么好的将面向对象的书,我看那些写书的人也未必就是真的彻底明白了,那书看的就是别扭。

家园 当时有这方面的书的

或者最简单的,就用dos下的debug工具n, l, d也可以。

家园 80年代的bios代码似乎是公开的吧?

直到现在网上还有很多386时代的bios代码,跟现在的bios代码比就太简单了...

家园 那时候有什么公开不公开啊

那时候什么东西拿来就破,没有人有什么版权那么一说。严格说起来,我相信就是那时候的BIOS肯定也是版权保护的,不过在中国就没有人管了。

现在的BIOS肯定是越来越复杂啦,早就不是当年那开茅荒的年代啰。

家园 现在网上有msdos6.0的代码

不知道上面有没有这两个文件的代码...

家园 嗯,对于开发而言

往往最新技术只能看英文资料,因为成书,或者翻译都要花时间。

书在解决知识点理解方面还是有用的。当年我的C的指针问题就是攻读了一本这方面的完整解剖秘籍之后,不再疑惑,开始入门。

家园 我当年满喜欢写程序的,觉得解决复杂的问题很有成就感,不过我已经不

写程序满多年了。

是的
家园 牛,活到老学到老
家园 你这个问题充分说明了C++是一种比较复杂的语言

像我这样多年没写程序的,用C写几个函数还很自然,但C++的语法和各种定义实在有点头大了。

int strlen(char* psz)

{

int len = 0;

while (*psz++)

++len;

return len;

}

char* strcpy(char* dst, char* source)

{

char* p = dst;

while (*dst++ = *source++) ;

return p;

}

char* strcat(char* s1, char* s2)

{

char* p = s1;

while (*s1)

++s1;

while (*s1++ = *s2++);

return p;

}

class string

{

public:

string();

string(char* psz);

string(const string& str);

~string();

string& operator=(const string& str);

int length();

char* get_str();

private:

char* m_pBuffer;

};

int string::length()

{

return strlen(m_pBuffer);

}

char* string::get_str()

{

return m_pBuffer;

}

string::string() : m_pBuffer(0)

{

}

string::string(char* psz) : m_pBuffer(0)

{

if (psz) {

int len = strlen(psz);

m_pBuffer = (char*)::malloc(len+1);

strcpy(m_pBuffer, psz);

}

}

string::string(const string& str) : m_pBuffer(0)

{

if (str.m_pBuffer) {

m_pBuffer = (char*)::malloc(str.length()+1);

strcpy(m_pBuffer, str.m_pBuffer);

}

}

string& string::operator=(const string& str)

{

if (this != &str) {

::free(m_pBuffer);

m_pBuffer = 0;

m_pBuffer = (char*)::malloc(strlen(str.m_pBuffer)+1);

strcpy(m_pBuffer, str.m_pBuffer);

}

return *this;

}

string::~string()

{

if (m_pBuffer) {

::free(m_pBuffer);

m_pBuffer = 0;

}

}

string operator+(const string& s1, const string& s2)

{

char* pBuffer = (char*)::malloc(s1.length() + s2.length() + 1);

strcpy(pBuffer, s1.get_str());

strcat(pBuffer, s2.get_str());

string s(pBuffer);

::free(pBuffer);

return s;

}

家园 感谢参与!建议你看一下我推荐的书,

如果你还对c++感兴趣的话,尤其是后两本。

看得出你是有一定的编程经验的,你的代码避免了很多程序员很容易犯的错误。 我发现的大问题有:

1. 从你的代码中看得出你是允许使用者用0指针的,而且你的string类缺省的内部就是0指针。可是你的strlen、strcpy、strcat都不能正确处理0指针(实际上库函数也不能)。这样如果用户的代码是

string s1,s2,s3=s1+s2;

程序就会崩溃。

2. c++程序里一般地说是不应该有malloc/free这两个库函数的。 你的程序里用这两个函数还会导致一个问题:当内存分配失败的时候malloc会返回0。而由于问题1,0指针会导致程序失败。

还有其他的一些小毛病,比如+函数里的内存使用有点笨拙,const可以再多用一些,get_str()破坏了封装,尤其是没有用const的时候。

家园 献你一朵花,矫正一个字。。

谭浩强。。。多了个g。。

自我矫正一下,贴错楼了,呵呵。

家园 这个题是很难的,特别是异常处理处理之类的东东。很多

看似很简单的问题其实很难,比如你就问一下C里面printf到底是如何实现的我就不大说得上来。

家园 真是奇怪,

当年刚接触C语言的时候就有人跟我说指针是难点,可是从来也没发现它是如何的难理解啊?指针难吗?奇怪的很

全看树展主题 · 分页首页 上页
/ 14
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河