2007年01月15日 星期一 12:33

快速学习C++

其中*为需要重点注意
《Essential C++》侯捷译 Stanley B. Lippman著

一、C++基础
 1、撰写C++程序
 ////////////////////////////////////////
 #include <iostream>
 using namespace std; //让命名空间暴光
 int main
 {
   cout<<"hello,C++"<<endl;
 }
 ///////////////////////////////////////
 如果main()函数的最后没有return语句,C99规定编译器要自动在生成的目标文件中(如 exe 文件)加入return 0;表示程序正常退出。
 2、对象的定义与初始化 ??※const的应用
 3、撰写表达式
 4、条件语句和循环(Loop)语句
  if (条件)
  {
   ...
  }
  else
  {
   ...
  }
  while (条件)
  {
   ...
  }
 5、数组 Arrays off-by-one 越界(数组array[n]从array[0]开始,最后一个为array[n-1])
 6、指针带来的弹性 *取值 &取地址
 7、文件的读写
  #include <fstream>
  ofstream outfile ("seq_data.txt"); //写文件
  ofstream outfile("seq_data.txt", ios_base::app); //追加形式开启
  ifstream infile("seq_data.txt"); //读文件
  fstream iofile("seq_data.txt", ios_base::in|ios_base::app); //读写

二、面向过程的编程风格
 1、撰写一个函数
  int function(int x, int *y)
  {
    ...
    return 0;
  }
 2、调用(invoking)一个函数
 3、提供默认参数值
 4、使用局部静态对象 const
 5、声明一个inline函数
 6、提供重载函数
 7、定义并使用模版函数
  template<typename elemType>
  int function(const int x, const elemtype y)
  {
    ...
  }
 8、函数指针 vector<int>* (*seq_pstr)(int);
 9、枚举类型 enum ns_type{ns_fibon, ns_lucas, ns_pell};
 10、设定头文件

三、泛型编程风格
 1、指针的算术运算 int* pi;pi+2的意义
 2、???Iterators泛型指针
  vector<string> svec;
  vector<string>::iterator iter=svec.begin();
 3、所有容器通用的操作
  equality() ==
  inequality() !=
  assignment() =
  empty()
  size()
  clear()
  begin()
  end()
  insert()
  erase()
 4、使用序列式容器
 5、使用泛型算法
 6、如何设计一个泛型算法
 (1)开始我们写了一个函数,它可以找出vector内小于10的所有元素,然而函数过于死板没有弹性。
 (2)接下来我为函数加上一个数值参数,让用户得以指定某个数值,以此和vector中的元素做比较。
 (3)后来我又加上一个新函数:一个函数指针,让用户得以指定比较方式。
 (4)然后我引入function object的概念,使我们得以将某组行为传给函数,此法比函数指针的做法效率更高,我们也带领各位简短地检阅了标准函数库提供的function object(所谓function object,是某种class的实体对象,这类classes对function call运算符进行了重载操作,如此一来,可使function object被当成一般函数来使用)[函数指针,指向函数]
 (5)最后我们以template function的形式重新实现。为了支持多种容器,我们传入一对iterators,标出一组元素的范围;为了支持多种元素型别,我将元素型别参数化也将施用于元素身上的“比较操作”参数化,以便得以同时支持函数指针和function object两种方式
 3、TMap使用
  map<string, int> words;
  words["verneer"] = 1;
  map<string, int>::iterator it;
  it->first;
  it->second;
  words.find(); //如果key已置于其中,find()会返回一个iterator,指向key/value形成一个pair;反之则返回end()
  words.count(); //返回某特定项目在map内的个数
 set 由一群keys组合,对于任何keys值,set只能存储一份
  set<int> iset
   iset.insert(ival);
   iset.insert(vec.begin(), vec.end());
 如何使用Iterator Inserters
  #include <iterator>
  back_inserter();
  inserter(vector, iterator);
  front_inserter();

四、基于对象的编程风格
 1、如何实现一个class
 class Jack
 {
 public:
  //...
 private:
 //...
 }
 2、constructor和destructor
 3、const
 4、this指针
 5、static class member静态的类成员 类名::静态成员函数
 6、iterator class
 7、friend class友元类
 8、copy assignment operator
 9、function object
 10、运算符重载
 11、指向类成员函数的指针
五、面向对象编程风格
 (1)概念:继承、多态、动态绑定
 (2)面向对象思维
 (3)不带继承的多态*
 (4)定义一个抽象基类:找出所有子类共通的操作行为->哪些操作与型相依(是否为virtual)->每个操作行为的存取层次(是public还是private还是protected)
 (5)定义一个派生类*
 (6)使用继承体系:将所有派生类共有的实现内容抽离出来,移至基类内
 (7)基类抽象:从子类中抽象出基类
 (8)初始化、析构、复制 子类数据成员=基类data member+本身data member
 (9)在派生类中定义一个虚函数 继承 虚拟函数的静态决议->派生时完全吻合
 (10)执行期型别鉴定机制*

六、以template进行编程
 1、被参数化的型别
 2、class template的定义
 3、template型别参数(type parameters)的处理
 4、实现一个class template
 5、一个以function template完成的output运算符
 6、常量表达式(constant expressions)默认参数(Default Parameters)
 7、Template参数
 8、member template funtions

七、异常处理*
标签: cplusplus
日期: 2016-06-10 17:30:06, 8 years and 219 days ago
留言

回复不允许使用html标签

通过电子邮件通知我有后续评论.