C++ Primer 学习笔记二

A        .函数探幽:

1.  要使用内联函数需要做:a. 在函数声明之前加上关键字inline;  b.在函数定义前面加上关键字inline; 内联函数的原始实现是宏!

2.  声明引用时必须进行初始化! (const指针也是在创建时进行初始化)

3.  如何给参数设置默认值?必须通过函数原型。因为编译器是通过查看原型来了解函数所使用的参数数目,因此函数原型也必须将可能的默认参数告知程序。必须从右向左添加默认值。

4.  函数在重载时,编译器在检查函数特征标(参数类型)时,将把类型引用和类型本身视为同一个特征标。匹配函数时,不区分const和非const变量。

B .    内存模型和名称空间:

1.  不要将函数定义或变量声明放到头文件中。为了避免在不知情的情况下将同一头文件包含多次,可以使用预处理器编译指令#ifndef,代码为:#ifndef COORDIN_H_       #define COORDIN_H_   ... #endif

2.  在c++中,可以使用register来声明局部变量,作用域为局部,没有链接性。因为存储在寄存器中,没有内存地址,因此不能使用地址操作符。register int x;

3.  静态存储持续性变量(在整个程序执行期间存在)有3种链接性:外部链接性、内部链接性和无链接性。下面给出代码:

          int global=1000;  //静态持续变量,外链接,在代码块的外面声明
          static int one_file=50;   //静态持续变量,内联接,代码快外面声明,并使用static限定符
          int main()
          {...}

          void func1(int n)
          {
                static int count=0;   //静态持续变量,没有链接性,只能在func1种使用。在代码块内声明,使用static限定符
           }

          所有的静态持续变量都有两个初始化特征:a.未被初始化的静态变量的所有位都被设为0;b.只能用常量表达式来初始化静态变量。

          对于外部链接性变量,有且仅有一个文件中包含了该变量的外部定义,其他文件要使用该变量,必须在引用声明中使用extern.

4.  c++不允许在一个函数中定义另外一个函数,因此所有函数的存储持续性都自动为静态的,即在整个程序执行期间都一致存在。默认情况下,函数的链接性为外部的。可以用static将函数的链接性设置为内部的。

5.   在c++中,同一个名称可能对应多个函数,在编译期间,必须为这些函数提供不同的符号名称。例如可以将spiff(int)转换为_spiff_i,而将spiff(double,double);转换为_spiff_d_d,这称为c++语言链接。而extern "c" void spiff(int); 表示以c的语言链接性来查找函数。

6.  using声明:假如存在一个名称空间 namespace Jill{double bucket(double n){...}   double fetch;} 则using Jill::fetch;就是一个using声明。using声明在函数内时,则声明的变量是局部的,如果声明在函数外,则声明的变量是全局的。

7.  using声明使得一个名称可用,而using编译指令使得所有的名称都可用。 using namespace Jill; 不要在头文件中使用using编译指令

C       .对象和类:

1.  不用在类中使用private,这是类对象的默认访问控制。类和结构的唯一区别在于,结构的默认访问类型是public的。

2.  cout和cerr的区别:cout对应于标准输出流,cerr对应于标准错误流; cout可以重定向,cerr不可以;cout要分配缓冲,因此cerr比cout快;它们的 标准默认输出设备都是屏幕。

3.  类的每个对象都有自己的存储空间,用于存储其内部变量;但同一个类的所有对象共享同一组类方法,即每种方法只有一个副本。

4.  默认构造函数是在未提供显式的初始化值时,被用来创建对象的构造函数。例如:Stock stock1; 当且仅当没有定义任何构造函数时,编译器才会提供默认构造函数。为雷定义了构造函数后,程序员就必须为它提供默认构造函数。否则Stock stock1;这样的声明将出错。

5.  const成员函数:void show()const; 其对应的定义为void Stock::show()const; 表明在这个类方法中不会修改调用对象。

6.  使类中的某个变量为整个类都可用。a.可以在类中声明一个枚举。在类中声明的枚举的作用域为整个类,例如: class Stock{ private:    enum{Len=30};};   所有的对象都不包含枚举!!!           b.使用static: class Stack{ private:  static const int Len=30;}; 这将创建一个Len常量,该常量不存储在对象中,而与其他的静态变量存储在一起!!

posted on 2008-03-11 13:49 弱水一瓢 阅读(208) 评论(0)  编辑 收藏 引用 所属分类: C++ Primer


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

文章分类

最新评论