zoukankan      html  css  js  c++  java
  • C++ Primer chap2

    1 new 运算符的用法:

      分配一个整型 int *pint = new int (1024); (1024 是初始值)。

      分配一个整型数组 int *pia = new int [8];  (八个元素)。

    对应的delete语句: delete pint; delete [] pia;

    2 友元函数可以访问类private部分的成员。

    3 在类中定义的函数自动被当做是内联函数,也可以在外面用inline声明内联函数。

    普通构造函数能够被隐式调用。而explicit构造函数只能被显示调用

     引用是一种没有指针语法的指针, 因此对于对象的引用&rhs的使用我们写成rhs._size,而不是rhs->_size 。

     每个类对象在被程序最后一次使用之后 它的析构函数就会被自动调用 

     为了把一个类设计成基类 要做的第二个设计考虑是找出类型相关的成员函数 并把这 

    些成员函数标记为virtual虚拟的。对于类型相关的成员函数 它的算法由特定的基类或派生类的行为或实现来决定 例如  

    对每种数组类型 下标操作符的实现是不同的 所以 我们将它声明为Virtual   

    8 把参数传递给基类的构造函数:

    inline IntArrayRC::IntArrayRC( const int *iar, int sz ) 

    : IntArray( iar, sz ) {} 

    9 虚拟函数比非虚拟函数的效率要低一些因为它们不能被内联 内联发生在编译时刻 而虚拟函数是 

    在运行时刻被处理的 

    10 泛型编程 template < class elemType >  关键字template 引入模板 参数由一对尖括号 <    >    括起来——本例中 有一个参数 

    elemType,关键字class 表明这个参数代表一个类型,标识符elemType 代表实际的参数名。

    11 程序中异常出现的点, 一旦识别出程序异常, 就会导致抛出 raise 或 throw 异常,异常被抛出时,正常的程序就被挂起,直到异常被处理完毕。典型地,程序异常的抛出与处理位于独立的函数或成员函数调用中,找到处理代码通常要涉及到展开程序调用栈 Program call stack; 一旦异常被处理完毕,就恢复正常的程序执行。

    例子:

    int* stats( const int *ia, int size )
    {
     int *pstats = new int[ 4 ]; 
     try {
      pstats[ 0 ] = sum_it( ia, size );
      pstats[ 1 ] = min_val( ia, size );
      pstats[ 2 ] = max_val( ia, size );
     }
     catch( string exceptionMsg )
      {/* 处理异常的代码 */} 
     catch( const statsException &statsExcp )
      {/* 处理异常的代码 */} 
     
     pstats[ 3 ] = pstats[ 0 ]/size;
     do_something( pstats );
     
     return pstats;
    }

    12 名字空间机制允许我们封装名字,如

    namespace Cplusplus_Primer_3E {
    template <class elemType>
     class Array { ... };
     // ...
    }

    可以给名字空间起一个别名

    namespace LIB =  Cplusplus_Primer_3E;

    用using引用名字空间。

    13 向量是一个类模板 所以我们这样写 :

    // 创建 vector 对象的各种方法
    需要#include <vector> 


    vector<int> ivec( 10 ); // 上面的代码分别定义了一个包含 10 个整型对象的向量 
    vector<string> svec( 10 );//1个包含10 个字符串对象的向量 

    vector<int> veco; // 空的 vector

    const int size = 8;
    const int value = 1024;
     
    // size 为 8 的 vector
    // 每个元素都被初始化为 0
    vector<int> vec1( size );
     
    // size 为 8 的 vector
    // 每个元素都被动始化为 1024
    vector<int> vec2( size, value );
     
    // vtc3 的 size 为 4
    // 被初始化为 ia 的 4 个值
    int ia[4] = { 0, 1, 1, 2 };
    vector<int> vec3( ia, ia+4 );
     
    // vec4 是 vec2 的拷贝
    vector<int> vec4( vec2 );

    下面的代码显示了怎样把各种各样的泛型算法应用到 vector 类对象上 
    #include <vector>
    #include <algorithm>
    #include <iostream>
    int ia[ 10 ] = {
     51, 23, 7, 88, 41, 98, 12, 103, 37, 6 };
     
    int main()
    {
     vector< int > vec( ia, ia+10 );
     
     // 排序数组
     sort( vec.begin(), vec.end() );
     
     // 获取值
     int search_value;
     cin >> search_value;
     
     // 搜索元素
     vector<int>::iterator found;
     found = find( vec.begin(), vec.end(), search_value );
     if ( found != vec.end() )
      cout << "search_value found!\n";
     else cout << "search_value not found!\n";
     
     // 反转数组
     reverse( vec.begin(), vec.end() );
     
     // ...
    }

         本章大致地讲述了C++为数据抽象(基于对象的程序设计), 面向对象的程序设计 泛型程序设计(模板 容器类型以及泛型算法)大型程序设计 (异常处理与名字空间)提供的支持 而本书余下的部分将更详细地介绍这些内容 逐步讲解 C++中基本 但又非常先进的特性 

    未完...2.6

  • 相关阅读:
    no-octal-escape (Rules) – Eslint 中文开发手册
    Object.isSealed (Object) – JavaScript 中文开发手册
    AngularJS SQL
    Eclipse 内容辅助
    ionic 单选框操作
    CSS border-top-color 属性
    Java 集合:(二十八) SortedMap 接口
    Java 集合:(二十七)Properties实现类
    Java 集合:(二十六) Hashtable 实现类
    Java 集合:(二十五)备用2
  • 原文地址:https://www.cnblogs.com/liujiahi/p/2196389.html
Copyright © 2011-2022 走看看