一聚教程网:一个值得你收藏的教程网站

热门教程

C++中的三大函数和操作符重载(Boolan)

时间:2022-06-25 04:38:30 编辑:袖梨 来源:一聚教程网

C++中三大函数:

  • 析构函数

  • 复制构造函数

  • =操作符(copy assignment operator)

这三个特殊的成员函数如果程序员没有实现,编译器将提供默认的实现方式。

析构函数:

形如~foo_t(),函数名和构造函数相同,前面加~,如果对象是自由变量创建,析构函数将在脱离作用域时调用。如果对象是通过new操作符创建的,则通过delete操作符调用析构函数。

复制构造函数:

形如foo_t(const foo_t& foo),以下情况复制构造函数均会被调用:

  1. 当对象按值返回时候(returned by value)

  2. 调用按值传参的函数(passed by value)

  3. 通过thrown抛出或caught捕获的对象

  4. 对象处于()包围的初始化列表中

=操作符:

重载=操作符,如foo_t& operator=(const foo_t& foo),对已有对象的赋值操作将调用该函数(未初始化的对象成员将调用复制构造函数)。

以下为代码实例:

 代码如下 复制代码

#include

#include

classfoo_t {

 friendstd::ostream &operator<<(std::ostream &os, foo_tconst&foo) {

  os << foo.data;

  returnos;

 }

 public:

 foo_t(void) : data(newchar[14]) { std::strcpy(data,"Hello, World!"); }

 ~foo_t(void) {delete[] data; }

 foo_t(constfoo_t& other);

 foo_t &operator=(constfoo_t& other);

 private:

 char*data;

};

foo_t::foo_t(constfoo_t& other) {

 std::cout <<"call copy constructor!!!"<< std::endl;

 this->data =newchar[strlen(other.data) + 1];

 strcpy(this->data, other.data);

}

foo_t& foo_t::operator=(constfoo_t& other) {

 std::cout <<"call the copy assignment operator!!!"<< std::endl;

 if(this== &other)

   return*this;

 this->data =newchar[strlen(other.data) + 1];

 strcpy(this->data, other.data);

 return*this;

}

intmain() {

 foo_t foo;

 std::cout << foo <<'n';

 foo_t t(foo);

 // foo_t t2 = t;

 foo_t t3;

 t3 = t;

 return0;

}

为了方便测试,可以分别在析构函数、拷贝构造、=重载处设置断点,观察程序执行流程。

热门栏目