重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍C++中三大函数和操作符重载的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
新乐网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联公司成立与2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司。
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 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; }
为了方便测试,可以分别在析构函数、拷贝构造、=重载处设置断点,观察程序执行流程。
以上是“C++中三大函数和操作符重载的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!