C++01

来源:互联网 发布:nginx lbs 编辑:程序博客网 时间:2024/06/05 19:55
c++难学之处:
不仅在于广博的语法,以及语法背后的语义,以及语义背后的深层思维,以及深层思维背后的对象思维;
语法----->>语义------>>思维------->>对象
还在于它提供了四种不同而相铺相成的编程范型(Programming paradigms):
procedural-based,object-based,object-oriented,generic-programming
基于程序PB,基于对象OB,面对对象OO,泛型GP

设计忠告:如何在两个不同做法中选择其一完成某项任务
选择继承(inheritance),还是模块(templates);
选择public继承,还是private继承;
选择private继承,还是composition复合;
选择member函数,还是non-member函数;
选择pass-by-value,还是pass-by-reference;

术语(terminology)
声明(declaration):告诉编译器某些东西的名称和类型
extern int x; //对象(object)声明
std::size_t numDigits(int number);//函数(function)声明
class Widget; //类(class)
template<typename T>;//模块(template)
class GraphNode;//"typename"的使用
定义(definition):提供编译器一些声明式所遗漏的细节。
对对象而言,定义是编译器为此对象分配内存的地址
对function或function template而言,定义提供了代码本体
对class或class template而言,定义列出了他们的成员
int x; //对象的定义
std::size_t numDigits(int number)//函数的定义
{
std::size_t digitsSoFar = 1;
while((number /=10)!=0)
++digitsSoFar;
return digitsSoFar;
}
class Widget{ //class的定义
public:
Widget();
_Widget();
};
初始化(Initialization):给予对象初值的过程
class A{
public:
A(); //default构造函数
};
class B{
public:
explicit B(int x=0,bool b=true);//default构造函数
};
class C{
public:
explicit C(int x);//不是default构造函数
}
explicit声明构造函数,可以阻止构造函数被用来执行隐式类型转换,但可被用来
执行显式类型转换


STL(Standard Template Library)标准模块库
作用于:
容器(vector,list,set,map);
迭代器(vector<int>::iterator,set<string>::iterator);
算法(for_each,find,sort);及相关机能


C++之父给C程序员的建议:
1.在C++中几乎不需要用宏,用const或enum定义明显的常量,用inline避免函数调用的额外开销;
   用模块去刻画一族函数或类型,用namespace去避免命名冲突
2.不要在你需要变量之前去声明,以保证你能立即对它进行初始化
3.不要用malloc,new运算会做的更好
4.避免使用void*、指针算术、联合和强制,大多数情况下,强制都是设计错误的指示器
5.尽量少用数组和C风格的字符串,标准库中的string和vector可以简化程序
6.更加重要的是,试着将程序考虑为一组由类和对象表示的相互作用的概念,而不是一对数据结构、
    和一些可以拨弄的二进制







0 0
原创粉丝点击