Chinaunix首页 | 论坛 | 博客
  • 博客访问: 166559
  • 博文数量: 73
  • 博客积分: 3106
  • 博客等级: 中校
  • 技术积分: 730
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-11 22:57
文章分类

全部博文(73)

文章存档

2018年(2)

2016年(1)

2012年(8)

2011年(21)

2010年(41)

我的朋友

分类: C/C++

2010-11-24 12:55:01

基础:

  •  因为常量在定义后就不能被修改,所以定义时必须初始化:
           const std::string hi = "hello!"; // ok: initialized
             const int i, j = 0; // error: i is uninitialized const
  • const 变量默认为 extern。要使 const 变量能够在其他的文件中访问,必须地指定它为 extern

             // file_1.cc
// defines and initializes a const that is accessible to other files
extern const int bufSize = fcn();
// file_2.cc
extern const int bufSize; // uses bufSize from file_1
// uses bufSize defined in file_1
for (int index = 0; index != bufSize; ++index)
// ...
  • 当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象。不可能将引用绑定到另一个对象。
  • 定义变量和定义数据成员存在非常重要的区别:一般不能把类成员的初始化作为其定义的一部分。当定义数据成员时,只能指定该数据成员的名字和类型。类不是在类定义里定义数据成员时初始化数据成员,而是通过称为构造函数的特殊成员函数控制初始化。
  • 如果使用 class 关键字来定义类,那么定义在第一个访问标号前的任何成员都隐式指定为 private;如果使用 struct 关键字,那么这些成员都是 public。使用 class 还是 struct 关键字来定义类,仅仅影响默认的初始访问级别。

  • 头文件一般包含类的定义、extern 变量的声明和函数的声明,因为头文件包含在多个源文件中,所以不应该含有变量或函数的定义。对于头文件不应该含有定义这一规则,有三个例外。头文件可以定义类、值在编译时就已知道的 const 对象和 inline 函数。

    预防多次包含同一头文件:

         #ifndef SALESITEM_H
    #define SALESITEM_H
    // Definition of Sales_itemclass and related functions goes here
    #endif
  • 基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库。其中最重要的标准库类型是 string
    vector,它们分别定义了大小可变的字符串和集合。vector 对象下标只能用于获取已存在的元素。
  • string 对象和 bitsets 对象之间是反向转化的:string 对象的最右边字符(即下标最大的那个字符)用来初始化 bitset 对象的低阶位(即下标为 0 的位)。当用 string 对象初始化 bitset 对象时,记住这一差别很重要。

  • 接受容器大小做形参的构造函数只适用于顺序容器,而关联容器不支持这种初始化。可以定义一个存放某类型对象的空容器,但是,只有在同时指定每个元素的初始化式时,才能使用给定容器大小的构造函数来创建同类型的容器对象。 

关于类:

  • 将关键字 const 加在形参表之后,就可以将成员函数声明为常量:

    double avg_price() const;
      const 成员不能改变其所操作的对象的数据成员。const 必须同时出现在声明和定义中,若只出现在其中一处,就会出现一个编译时错误。
  • 像其他 inline 一样,inline 成员函数的定义必须在调用该函数的每个源文件中是可见的。不在类定义体内定义的 inline 成员函数,其定义通常应放在有类定义的同一头文件中。

  • 在普通的非 const 成员函数中,this 的类型是一个指向类类型的 const 指针。可以改变 this 所指向的值,但不能改变 this 所保存的地址。在 const 成员函数中,this 的类型是一个指向 const 类类型对象的 const 指针。既不能改变 this 所指向的对象,也不能改变 this 所保存的地址。不能从 const 成员函数返回指向类对象的普通引用。const 成员函数只能返回 *this 作为一个 const 引用。
  • 基于成员函数是否为 const,可以重载一个成员函数;同样地,基于一个指针形参是否指向 const,可以重载一个函数。
  • 有时(但不是很经常),我们希望类的数据成员(甚至在 const 成员函数内)可以修改。这可以通过将它们声明为 mutable 来实现。
  • 指令             用途
    # 空指令,无任何效果
    #include 包含一个源代码文件
    #define 定义宏
    #undef 取消已定义的宏
    #if 如果给定条件为真,则编译下面代码
    #ifdef 如果宏已经定义,则编译下面代码
    #ifndef 如果宏没有定义,则编译下面代码
    #elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
    #endif 结束一个#if……#else条件编译块
    #error 停止编译并显示错误信息

面向对象:


  • 不能定义为virtual function 的情况:构造函数、static成员函数。派生类中虚函数的声明必须与基类中的定义方式完全匹配,但有一个例外:返回对基类型的引用(或指针)的虚函数。派生类中的虚函数可以返回基类函数所返回类型的派生类的引用(或指针)。一旦函数在基类中声明为虚函数,它就一直为虚函数,派生类无法改变该函数为虚函数这一事实。
  • 默认继承访问级别根据使用哪个保留字定义派生类也不相同。使用 class 保留字定义的派生默认具有 private 继承,而用 struct 保留字定义的类默认具有 public 继承。

术语:


  • const 引用是指向 const 的引用

阅读(618) | 评论(1) | 转发(0) |
0

上一篇:Python开发

下一篇:string arrange

给主人留下些什么吧!~~

chinaunix网友2010-11-24 14:28:57

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com