C++走向精通
文章平均质量分 69
滨边美波她男友
范进中举
展开
-
C++ this关键字
留个坑。class Base{public: int a = 0x55; void destroy() { cout << "destroy: " << hex << this << dec << endl; this->show(); delete this; } virtual void show() { cout << "Base:原创 2021-10-03 18:04:54 · 97 阅读 · 0 评论 -
C++ 内存管理详解
本篇主要参考《More Effective C++》,主要内容是了解C++各种不同意义的new和delete。有时候我们觉得,C++的术语仿佛是要故意让人难以理解似的。这里就有一个例子:请说明 new operator 和 operator new 之间的差异(译注:本书所说的 new operaotr,即某些C++教程如 C++ Primer所谓的 new expression,new表达式)。当你写出这样的代码:string *ps = new string("Memory Management"原创 2021-09-20 01:40:36 · 189 阅读 · 0 评论 -
C++派生类向基类的类型转换
本篇主要参考《C++ Primer 第5版》,为什么派生类能向基类进行类型转换。1. 派生类向基类的类型转换C++ Primer P5301.派生类对象中含有与其基类对应的组成部分,所以我们能把派生类的对象当成基类对象来使用,而且我们也能将基类的指针或引用绑定到派生类对象中的基类部分上。编译器会隐式地执行派生类到基类的转换。2.为什么能把基类的指针或引用绑定到派生类对象中的基类部分上?因为派生类对象中含有基类的组成部分,所以可以用基类类型的指针指向派生类对象中的基类部分,安全地访问基类部分的成员原创 2021-07-24 14:59:30 · 1747 阅读 · 0 评论 -
C++ 鉴别函数重载
本篇博文将梳理一下C++有关函数重载的疑难点,参考书籍C++ Primer第五版 第6章 第4节 《函数重载》.1. 函数重载的定义1.如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为重载函数.2.总结函数重载的3个结论:(1)同一作用域;(2)函数名字相同,但形参列表不同;(3)不关心函数返回值是否相同;C++ Primer P207名字查找发生在类型检查之前。牢记这一点对理解C++的作用域有很大帮助。2. 关于函数重载的剖析2.1 同一作用域-------原创 2021-07-19 22:42:48 · 1268 阅读 · 2 评论 -
C++ copy构造函数
本篇主要参考《Effective C++ 第3版》条款12的相关内容:复制对象时勿忘其每一个成分。设计良好之面向对象系统(OO-systems)会将对象的内部封装起来,只留两个函数负责对象拷贝(复制),那便是带着适切名字的copy构造函数和copy assignment操作符,统称为copying函数。编译器在必要时候会为我们的classes创建copying函数:将被拷对象的所有成员变量都做一份拷贝。如果你声明自己的copying函数,意思就是告诉编译器你并不喜欢缺省实现中的某些行为。编译器仿佛被冒犯原创 2021-09-19 21:35:48 · 266 阅读 · 0 评论 -
C++ operator= 自我赋值
本篇主要参考《Effective C++ 第3版》条款11的相关内容,记录C++重载赋值操作符的相关问题。C++自我赋值发生在对象被赋值给自己时:class Widget {...};Widget w;...w = w; //赋值给自己你可能认为,只要程序员在写代码时稍加注意,就可以避免出现自我赋值。然而,代码中的自我赋值并不总是如此明显的形式出现,这种情况出现在处理多个相同类型的对象时,左侧和右侧操作数恰好指向同一个对象:vector<Widget> wg_v;...w原创 2021-09-19 16:11:12 · 544 阅读 · 0 评论