0%

拷贝构造函数是一种特殊的构造函数, 其形参必须是本来对象的一个引用,但并不限制为const,一般普遍的会加上const限制. 使用拷贝构造函数的目的是一个已经存在的对象来初始化同类的一个新对象.

声明拷贝构造函数的语法规则如下:

类名(类名 &对象名)

通常构造函数只在对象创建时被调用, 而拷贝构造函数在以下情况下会被调用:

  • 当使用类的一个对象去初始化该类的一个新对象时.
  • 如果一个函数的形参是类的对象, 那么当调用该函数时对应类的拷贝构造函数也会被调用.
  • 如果函数的返回值是类的对象, 那么该函数返回时对应类的拷贝构造函数也会被调用.(但一般编译器会进行返回值优化, 减少临时对象带来的开销,参考 C++返回值为对象时复制构造函数不执行怎么破)
阅读全文 »

友元是一种定义在类外部的普通函数或类,但它需要在类体内使用关键字friend进行说明. 友元的正确使用能提高程序的运行效率,但同时也破坏了类的封装性和数据的隐藏性,导致程序可维护性变差。

阅读全文 »

使用new语句为自定义类型的对象分配存储空间. 只需要将变量声明为指向自定义类型对象的指针, 再利用new语句分配内存就可以了.

使用new语句来创建类对象的语法如下:

new 类型名
或
new 类型名(初始值列表)
阅读全文 »

构造函数

类的初始化由构造函数完成, 如果没有为某个类编写构造函数, 编译器会自动这个类生成一个默认的构造函数. 构造函数主要用来在创建类的对象时为对象的成员变量赋值.

一个类可以有多个构造函数, 可以根据其参数个数或参数类型的不同进行区分, 即构造函数的重载.

构造函数的命名必须与类名完全相同; 其次, 构造函数主要用于初始化对象的状态, 因此没有返回值, 也不能用void修饰. 最后构造函数不能被直接调用, 必须在创建对象时才会自动调用.

阅读全文 »

在C++中, 每个对象的成员(属性和方法)均可被定义为公有(public), 私有(private)和保护(protected)三种类型.

关键字public表示成员是完全公开的, 任何环境下都可以通过对象对其进行访问.

关键字private声明的成员只能通过指向当前类(不包括子类)的this指针才可以访问, 其他环境下不能直接进行访问.

关键字protected较public和private而言被用到的机会较少, 表示成员是半公开的, 即外界无法直接访问这个控制级别的成员, 但是指向当前类或者当前类子类的this指针可以访问.

命名空间(英语:Namespace)表示标识符(identifier)的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他命名空间中。

阅读全文 »

在C++的历史发展中,有很多的语言特征(特别是语言的晦涩之处)来自于C语言,预处理就是其中的一个.

预处理器可以通过预处理命令对一个资源进行等价替换, 预处理命令是一些以#开头的单行命令. 常见的预处理包括: 宏替换,文件包含和条件编译. 下面将分别进行介绍.

阅读全文 »

C++中文件的输入和输出机制和屏幕上输入输出相似, 主要区别在于需要显式地打开和关闭文件. 对文件进行操作时会涉及到5个相关的类:

  • fstreambase: 公共基类, 具体文件操作中不会使用这个类.
  • ifstream: 从istream派生, 负责文件的读取.
  • ofstream: 从ostream派生, 负责文件的写入.
  • fstream: 从fstreambase和iostream中派生, 负责对文件进行写入和读取.
  • filebuf: 从streambuf中派生, 用来提供缓冲支持.
阅读全文 »