源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-03-15 14:50 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C++中的三大函数和操作符重载(Boolan)
[b]C++中三大函数:[/b] [list] [*][b]析构函数[/b][/*] [*][b]复制构造函数[/b][/*] [*][b]=操作符(copy assignment operator)[/b][/*] [/list] 这三个特殊的成员函数如果程序员没有实现,编译器将提供默认的实现方式。 [b]析构函数:[/b] 形如~foo_t(),函数名和构造函数相同,前面加~,如果对象是自由变量创建,析构函数将在脱离作用域时调用。如果对象是通过new操作符创建的,则通过delete操作符调用析构函数。 [b]复制构造函数:[/b] 形如foo_t(const foo_t& foo),以下情况复制构造函数均会被调用: [list=1] [*]当对象按值返回时候(returned by value)[/*] [*]调用按值传参的函数(passed by value)[/*] [*]通过thrown抛出或caught捕获的对象[/*] [*]对象处于()包围的初始化列表中[/*] [/list] [b]=操作符:[/b] 重载=操作符,如foo_t& operator=(const foo_t& foo),对已有对象的赋值操作将调用该函数(未初始化的对象成员将调用复制构造函数)。 以下为代码实例:
#include <cstring>
#include <iostream>
class foo_t {
 friend std::ostream &operator<<(std::ostream &os, foo_t const &foo) {
  os << foo.data;
  return os;
 }
 public:
 foo_t(void) : data(new char[14]) { std::strcpy(data, "Hello, World!"); }
 ~foo_t(void) { delete[] data; }
 foo_t(const foo_t& other);
 foo_t &operator=(const foo_t& other);
 private:
 char *data;
};
foo_t::foo_t(const foo_t& other) {
 std::cout << "call copy constructor!!!" << std::endl;
 this->data = new char[strlen(other.data) + 1];
 strcpy(this->data, other.data);
}
foo_t& foo_t::operator=(const foo_t& other) {
 std::cout << "call the copy assignment operator!!!" << std::endl;
 if (this == &other)
   return *this;
 this->data = new char[strlen(other.data) + 1];
 strcpy(this->data, other.data);
 return *this;
}
int main() {
 foo_t foo;
 std::cout << foo << '\n';
 foo_t t(foo);
 // foo_t t2 = t;
 foo_t t3;
 t3 = t;
 return 0;
}
为了方便测试,可以分别在析构函数、拷贝构造、=重载处设置断点,观察程序执行流程。 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程素材网!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部