读书人

0 导读 取乎其上得乎其中;取乎其中

发布时间: 2013-03-06 16:20:31 作者: rapoo

0 导读 取乎其下,得乎其中;取乎其中,得乎其下;取乎其下,则无所得矣

网站读得经验两条:

称为C++的准标库的Boost库。对于C++学习,建议大家经常去看一些科技网站,关注一些C++的开源库,这样很多时候就避免了重复发明轮子的过程。

http://www.csdn.net/article/2012-12-17/2812914

经常阅读帮助文档的

很关键的一点是,过于在乎代码细节了,完全忽略了思路的重要地位。后来我换了一种学习方法,核心仍旧是以实践为主,不过,不是照抄书上的例子,而是先把例子看完,拿出一张纸,用笔写下例子代码要实现什么功能,第一步做什么,第二步做什么,用到哪些知识,使用了哪些类哪些函数,为什么要用。然后把书合上,就根据纸上写的内容去编程。这种做法有些难度,而且容易出错,不过好处很多,一是挣脱了书本上的示例的束缚,自由发挥空间大,不容易形成定势思维;二是出错了无法通过编译,就会迫使我去主动寻找错误,不知不觉中,我不看书都学会了调试的方法。

“尽信书者则不如无书”,不应该什么都相信书本上说的,上大学二年级的时候,记得有一位老师说过:“给你这本教材,如果你没把其中的知识学会,那你将非常失败;如果你把书中的知识全部学会,勉强给你合格;如果你看完这本书之后,把书中的内容推翻,那你才是一个了不起的人。”

编程其实更应该注重思想,写代码只不过是一个逻辑翻译过程。

http://www.csdn.net/article/2013-02-26/2814263/2

孔子云:“取乎其下,得乎其中;取乎其中,得乎其下;取乎其下,则无所得矣”。(读过《effective C++》后,好书真的就是这种感觉。)

0 导读

0-1最佳的用途(我觉得也是学习过程中应该随之思考的):C++如何行为;为什么那样行为;如何利用其行为形成优势。

0-2《Effective C++》提供内容的目的:实现高效的程序;重视移植性;规避编译器难以显漏的问题。

0-3术语

声明式

作者将内置类型(如int)也称为一个对象。

定义式

对对象而言,是编译器为此分配内存的地点(int x);对函数和函数模板来说,提供了代码本体;对类和类模板来说,是列出其成员。

初始化

explicit(明显的,清楚的):禁止进行隐式转换。

class A{

public:

A(); //default 构造函数,不带实参;

};

class B{

public:

exlicit B(intx=0, bool b= ture); //default构造函数,带实参;

};

class C{

public:

explicit C( intx); //不是default构造函数;

};

Copy构造函数copy assignment操作符(效率是否一致呢?赋值操作符是建立在两个已经存在的对象基础上;拷贝构造函数是构造还未建立的对象。作用的对象不同)

前者“以同型对象初始化自我对象”;后者“从另一个同型对象中拷贝其值到自我对象”。

Widget w1; //调用default构造函数;

Widget w2(w1); //调用拷贝构造函数(copy);

W2=w1; //调用copyassignment操作符;

Widget w2=w1; //调用copy构造函数;一个新的对象被定义,一定会调用构造函数,不会调用赋值符。(也就是说=也能具有拷贝功能)

代码验证0-1:#include <iostream>using namespace std;class Widget{public:Widget();Widget(Widget & rhs);Widget & operator=(const Widget & rhs);private:};Widget::Widget(){    cout<<"default construct"<<endl;}Widget::Widget(Widget & rhs){cout<<"copy"<<endl;}Widget & Widget:: operator=(const Widget &rhs){cout<<"copy assignment"<<endl;return *this;                                         //注意返回的为引用类型。}int main(){Widget a;Widget b(a);b=a;Widget c=a;return 0;}

对C++程序员来说,尽可能避免不明确的行为。

代码验证0-2:

#include <iostream>using namespace std; int main(){//int *p=0;//cout<<*p<<endl;         //(Vc++6.0编译成功,执行失败)char name[] ="darla";        char c = name[10];cout<<c<<endl;            //(Vc++6.0编译成功,执行输出特殊符号)}


读书人网 >编程

热点推荐