我们平时编写代码都是使用的集成开发工具,很多时候都忽略了c++中隐藏的成员函数。具体来说,c++编译器会自动提供一下几个基本函数:
  ●默认构造函数,如果没有定义构造函数
  ●复制构造函数,如果没有定义
  ●析构函数,如果没有定义
  ●赋值操作符,如果没有定义
  ●地址操作符
class Stack
{
private:
char *str;
public:
Stack(); //默认构造函数
~Stack();//析构函数
Stack (const Stack &); //复制构造函数
Stack (char *str )    // 构造函数
Stack & Stack::operator=(const Stack  &); //赋值操作符
Stack & operator =(const Stack &);  //地址操作符
void Add() // 成员函数
};
  刚开始学习c++的时候见的比较多的也默认构造函数和析构函数了,其他的几个很少用到,甚至在代码中没有见到过,在这里梳理一下。
  1、默认构造函数。如果没有提供任何构造函数,c++将创建一个没有任何参数和行为的默认构造函数。如果定义了构造函数,c++将不会定义默认构造函数。如果希望在创建对象时显式地对它进行初始化,或需要创建对象数组时,则必须显式地定义默认构造函数。这里需要说明一下,在创建对象数组时,这个类必须提供默认构造函数,因为初始化对象数组的方案是,首先使用默认构造函数创建数组元素,然后花括号中的构造函数将创建临时对象,然后将临时对象的内容复制到相应的元素中。
  有两种方式可以用来定义默认构造函数,一种是给已有构造函数的所有参数提供默认值:
  Stock(const char* a = "Error", int m = 0,double dr = 0.0);
  另一种方式是通过函数重载来定义另一个构造函数——一个没有参数的构造函数:
  Stock();
  由于只能有一个默认构造函数,因此不要同时采用这两种方式。
  2、复制构造函数
  又叫拷贝构造函数。它用于将一个对象复制到新创建的对象中。也是说,它用于初始化过程中,而不是常规的赋值过程中。类的复制构造函数原型通常如下:
  class_name (const class_name &)
  它接受一个指向类对象的常量引用作为参数。
  这里需要注意复制构造函数和赋值操作符的区别,以免混淆两者的功能。
  1)新建一个对象并将其初始化为同类现有对象时,复制构造函数都将被调用。每当程序生成了对象副本时,编译器都将使用复制构造函数,具体说,当函数按值传递对象或函数返回对象时,都将使用复制构造函数。假设motto是一个Stack类对象,下面几种都会调用复制构造函数。
  Stack ditto(motto);
  Stack ditto = motto;
  Stack ditto = Stack(motto);
  Stack *pDitto = new Stack(motto);