高质量程序设计指南c++/c语言(5)--构造函数和值传递惹的祸

摘要: #include<iostream>using namespace std;class A;void bad_fun(A a);class A{public: A(){} A(const A &a) { cout << "A" << endl; bad_fun(a); }};void bad_fun(A a){}int main(void){ A a; bad_fun(a); return 0;}bad_fun函数与拷贝构造函数互相调用,上面的代码会一致递归运行下去,直到栈溢出。我在写上面代码的时候,出现了一段小插曲#inc... 阅读全文
posted @ 2013-04-26 16:43 江在路上2 阅读(184) 评论(0) 推荐(0) 编辑

高质量程序设计指南c++/c语言(4)--构造函数的成员初始化列表

摘要: 我们一般习惯在构造函数体内进行初始化数据成员,然而这不是真正意义上的初始化,而是赋值。真正的初始化是使用所谓的初始化表达式表(简称初始化列表)进行的,该列表里的初始化工作发生在函数体内的任何代码被执行之前。(1)类的非静态const数据成员和引用数据成员只能在初始化列表里初始化,因为他们只存在初始化语义,而不存在赋值语义。(2)类的数据成员的初始化可以采用初始化表或函数体内赋值两种方式。这两种方式的效率不完全相同。class A{};class B{public: B(const A &a);private: A m_a;};//(1)B::B(const A &a):m_a. 阅读全文
posted @ 2013-04-26 16:06 江在路上2 阅读(159) 评论(0) 推荐(0) 编辑

高质量程序设计指南c++/c语言(3)--c++编译器如何处理成员函数

摘要: 在编译器眼中,同一个函数只存在一个实现,不管是全局函数还是成员函数。那么c++是如何处理类的成员函数的呢?实际上,c++通过name-mangling技术把每一个成员函数都转换成了名字唯一的全局函数,并把通过对象、指针或者引用对每一个成员函数的调用语句都改写成为相应的全局函数调用语句。每一个非静态数据成员函数都会被添加一个本类对象的指针作为第一个参数,这就是this指针的由来,然后再运用name-mangling技术处理。例如Rectangle类的SetLength成员函数被编译器改写后的样子可能是: void _SetLength@Rectangle$2F&pf@GS(Rectan. 阅读全文
posted @ 2013-04-26 14:48 江在路上2 阅读(153) 评论(0) 推荐(0) 编辑

高质量程序设计指南c++/c语言(2)--多态数组

摘要: 如果能够在数组里放置一些多态对象的话,就可以通过一致的接口来动态地调用它们自定义的虚函数实现啦。其实这个想法是很好的,但是在具体操作过程中就会产生一些没有意识到的问题。#include<iostream>using namespace std;class Shape{public: virtual void fun(void) const { cout << "Shape::fun" << endl; }};class Circle: public Shape{public: virtual void fun(void) const { 阅读全文
posted @ 2013-04-26 12:44 江在路上2 阅读(200) 评论(0) 推荐(0) 编辑

高质量程序设计指南c++/c语言(1)--程序版式

摘要: c++/c的文件结构和程序版式并不影响功能,也无多少技术含量,但是能反映出开发者的职业化程度。我们当然希望自己的程序看上去是专业级的。 版式虽然不会影响程序的功能,但是会影响清晰性。程序的版式追求清晰、美观,是程序风格的重要因素。可以把程序的版式比喻为”书法“,好的”书法“可让人一目了然,看得兴致勃勃。程序员们学习程序的”书法“,弥补大学计算机教育的漏洞,是在很有必要。 阅读全文
posted @ 2013-04-26 12:38 江在路上2 阅读(165) 评论(0) 推荐(0) 编辑

c/c++之路

摘要: c/c++是一门博大精深的语言,永远不要说我精通c/c++,只能怀着一颗虔诚的心,在通往c/c++的道路上不知疲倦地探索。 下面是学习c/c++的经典书籍: 1、谭浩强c语言程序设计 2、谭浩强c++语言程序设计 当我们精读完上面两本书之后,应该对c/c++有了一定的了解。接下来可以拜读一下大师级的作品 1、The C programming language (作者:K&R) 2、The C++ programming language (作者:K&R) 3、Effective C++ 4、More Effective C++ 5、E... 阅读全文
posted @ 2013-04-26 12:37 江在路上2 阅读(129) 评论(0) 推荐(0) 编辑