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-2Effective 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编译成功,执行输出特殊符号)
}

 

 


 

你可能感兴趣的:(C++,C++,effective,学习c++,C++总结)