最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
C++中的三大函数和操作符重载(Boolan)
时间:2022-06-25 04:38:30 编辑:袖梨 来源:一聚教程网
C++中三大函数:
析构函数
复制构造函数
=操作符(copy assignment operator)
这三个特殊的成员函数如果程序员没有实现,编译器将提供默认的实现方式。
析构函数:
形如~foo_t(),函数名和构造函数相同,前面加~,如果对象是自由变量创建,析构函数将在脱离作用域时调用。如果对象是通过new操作符创建的,则通过delete操作符调用析构函数。
复制构造函数:
形如foo_t(const foo_t& foo),以下情况复制构造函数均会被调用:
当对象按值返回时候(returned by value)
调用按值传参的函数(passed by value)
通过thrown抛出或caught捕获的对象
对象处于()包围的初始化列表中
=操作符:
重载=操作符,如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; } |
为了方便测试,可以分别在析构函数、拷贝构造、=重载处设置断点,观察程序执行流程。
相关文章
- 光遇12.26免费魔法有什么 12-26
- 江南百景图碎金泉怎么样 12-26
- 江南百景图游宴廊怎么样 江南百景图游宴廊建筑介绍 12-26
- 江南百景图碎金泉怎么样 江南百景图碎金泉建筑介绍 12-26
- 炉石传说兑换码大全 12-26
- 重返未来1999趋光性研究夜幕之外怎么玩 趋光性夜幕之外活动介绍 12-26