您的位置:首页 > 编程语言 > C语言/C++

c++ primer有感

2018-01-05 00:45 239 查看

 一、const引用形参

应该将不需要修改的实参的形参设置为const引用类型,这样的话,比较灵活,可以传递const和非const类型,且避免含有普通的非引用形参的函数复制元素。

 二、指向指针的引用形参

 (int* &a)可以改变指针的值。

三、容器作参数

C++ 程序员倾向于通过传递指向容器中需要处理的元素的迭代器来传递容器:

void print(vector<int>::const_iterator beg,
vector<int>::const_iterator end)
{
while (beg != end) {
cout << *beg++;
if (beg != end) cout << " "; // no space after last element
}
cout << endl;
}


四、传递给函数的数组的处理

第一种方法是在数组本身放置一个标记来检测数组的结束。C 风格字符串就是采用这种方法的一个例子,它是一种字符数组,并且以空字符 null 作为结束的标记。

使用标准库规范,第二种方法是传递指向数组第一个和最后一个元素的下一个位置的指针。调用这个版本的函数需要传递两个指针:一个指向要输出的第一个元素,另一个则指向最后一个元素的下一个位置。只要正确计算指针,使它们标记一段有

效的元素范围,程序就会安全。

第三种方法是将第二个形参定义为表示数组的大小,这种用法在 C 程序和标准化之前的 C++ 程序中十分普遍。

五、返回引用

  当函数返回引用类型时,没有复制返回值。相反,返回的是对象本身。
  理解返回引用至关重要的是:千万不能返回局部变量的引用。当函数执行完毕时,将释放分配给局部对象的存储空间。此时,对局部对象的引用就会指向不确定的内存。优点是:不需要开辟新空间保存变量,针对非局部变量。
  千万不要返回指向局部对象的指针。


六、常成员函数

  const 对象、指向 const 对象的指针或引用只能用于调用其const 成员函数,如果尝试用它们来调用非 const 成员函数,则是错误的。常成员函数只能读取对象的数据,不能修改。
  普通对象可以调用常成员函数和非常成员函数。

  常对象只能调用const成员函数。

七、用 typedef  简化函数指针的定义

函数指针类型相当地冗长。使用 typedef 为指针类型定义同义词,可将函数指针的使用大大简化::

      typedef bool (*cmpFcn)(const string &, const string &);
在要使

用这种函数指针类型时,只需直接使用 cmpFcn 即可,不必每次都把整个类型声明全部写出来。

八、stringstream 对象的和使用

  有些程序需要同时使用这两种方式:有些处理基于每行实现,而其他处理则要操纵每行中每

个单词。可用 stringstreams 对象实现。用getline()和istringstream实现。
  stringstream 提供的转换和/或格式化。stringstream 对象的一个常见用法是,需要在多种数据类型之间实现自动格式化时使用该类类型。
C++ 使用标准库类处理输入和输出:

•  iostream 类处理面向流的输入和输出。

•  fstream 类处理已命名文件的 IO。

•  stringstream 类处理内存中字符串的 IO。

九、构造函数

  可以初始化 const 对象或引用类型的对象,但不能对它们赋值。在开始执行构造函数的函数体之前,要完成初始化。初始化 const 或引用类型数据成员的唯一机会是构造函数初始化列表中。
  当类成员需要使用初始化列表时,通过常规地使用构造函数初始化列表,就可以避免发生编译时错误。
  除非有明显的理由想要定义隐式转换,否则,单形参构造函数应该为 explicit。将构造函数设置为explicit 可以避免错误,并且当转换有用时,用户可以显式地构造对象。
  复制构造函数的定义与其他构造函数一样:它与类同名,没有返回值,可以(而且应该)使用构造函数初

始化列表初始化新创建对象的成员,可以在函数体中做任何其他必要工作。有指针或分配其他资源时需要显式定义复制构造函数。

十、静态对象

类可以定义 类  静态成员,而不是定义一个可普遍访问的全局对象。

static 成员函数没有  this 指针。

十一、析构函数

 如果类需要析构函数,则它也需要赋值操作符和复制构造函数,这是一个有用的经验法则。这个规则常称为 三法则,指的是如果需要析构函数,则需要所有这三个复制控制成员。

十二、赋值操作符

 赋值操作符首先要检查对象是否不同。赋值时需删除左操作数,并在撤销左操作数的成员之后,将右操作数的成员赋值给左操作数的相应成员。如果对象是相同的,则撤销左操作数的成员也将撤销右操作数的成员!

十三、虚函数

  派生类一般会重定义所继承的虚函数。
  派生类中虚函数的声明(第 7.4 节)必须与基类中的定义方式完全匹配,但有一个例外:返回对基类型的引用(或指针)的虚函数。派生类中的虚函数可以返回基类函数所返回类型的派生类的引用(或指针)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: