《C++ PRIMER》笔记
个人读《C++ primer(第四版)》时做的笔记和一些心得体会
秦伟H
目标是略懂:C++,深度学习,三维重建,CV,SLAM,无人机,无人车,多传感器融合,组合导航。有事邮件:qw072117@foxmail.com huqinwei987@gmail.com
展开
-
C++ primer -pe13——10
小总结:赋值操作符和复制初始化通常在一起使用,两个都有合成版本,有时候可以不用管另外private: Class(const Class &);可以防止用户代码复制该类对象,但是友元和成员仍可进行复制,就干脆只声明不定义,此种方法只是防止出现结果,但不能阻止调用,调用将导致链接失败。//那么,怎么用成员和友元来测试这个复制呢,明天解决回忆了一下static知识点,利用变原创 2012-04-22 23:55:16 · 751 阅读 · 0 评论 -
C++primer pe13_15(还有13——4、9、12中NoName类的指针疑惑)
new Sales_item; new Sales_item; new Sales_item; new Sales_item;//这些必须主动delete//计算析构函数的调用次数,在析构函数中定义了一个打印语句以供判断#include"head.h"#include"Sales_item.h"void fcn(const Sales_item *trans,原创 2012-04-23 10:36:14 · 806 阅读 · 0 评论 -
类的指针成员管理
之前纠结的那个NoName中的指针成员问题,13.5章有集中讨论了类的指针成员管理:danglingPtr.cpp删除ip后的一些操作和结果: delete ip;std::cout 书中老是说不明白这个问题,前边的NoName应该就是表达错误如果析构中真的有delete *ptr;这种删除对象的析构的话, int i = 42; HasPtr p1(&i, 42);直接就内存原创 2012-04-23 23:28:33 · 813 阅读 · 0 评论 -
C++ Primer中智能指针的一个小疑惑,是书中的bug?
C++中的管理指针成员方法,有一个是智能指针。《C++ Primer》原书495,译本424这个位置意思很简单,利用一个U_Ptr类充当HasPtr的私有计数类,防止多个HasPtr对象调用析构delete同一个基础对象(int)class U_Ptr{ friend class HasPtr; int *ip; size_t use; U_Ptr(int *p):原创 2012-04-24 21:53:15 · 1639 阅读 · 2 评论 -
操作符重载
注意事项:有些必须是成员函数,比如,下标操作,赋值操作,有些最好不是,比如对称的比较==自定义操作符至少要满足基本需要:比如在关联容器中的键类型需要BTW,很多操作最好对应出现,比如+对应+=;==对应!=;>对应 >= Q1:如果不定义,有些操作符没意义,比如赋值,取地址和逗号操作符,但是Sales_item没定义operator&,却可以取地原创 2012-04-25 10:59:19 · 1303 阅读 · 0 评论 -
算术操作符和关系操作符(1)
建议模式:用+=操作而不是+,省去了复制对象习题14.12,是用+=去调用+,缺点自然是复制很多次,不过为什么会出错,this不是和rhs一样的引用么?因为是成员函数,this错在哪了inlineSales_item& Sales_item::operator+=(const Sales_item &rhs){ Sales_item item; ite原创 2012-04-26 00:54:08 · 906 阅读 · 0 评论 -
《C++primer》操作符重载之CheckoutRecord相关
有个稍微特殊的容器成员,定义从输入到输出,到下标等的一系列操作符 PE14.7//为下面的类顶一个一个输出操作符,#include"head.h"class CheckoutRecord{public: CheckoutRecord(std::vector* > wait_list): book_id(0.0), title("hell"), date_borr原创 2012-04-26 13:07:58 · 1439 阅读 · 0 评论 -
两层指针共用一个智能指针控制基本对象的操作--成员访问操作符
智能指针,让ScreenPtr指向ScrPtr,来控制基础对象ScreenPtr(Screen *p): ptr(new ScrPtr(p)) {}解引用和箭头操作 Screen operator*(){return *ptr->sp;} Screen* operator->(){return ptr->sp;}两个小缺陷,第一个是未定义const版本,第二个是返回的原创 2012-04-26 23:09:25 · 1451 阅读 · 0 评论 -
自增自减操作符的前后缀,下标和解引用操作与自增自减一起使用,还有指针加减法的实现--围绕CheckedPtr类
原例,类//自增自减操作,前缀后缀,后缀调用前缀来实现,同!=调用==#include"head.h"//用来处理数组//后面习题14_23起,对类进行完善,找代码去后边class CheckedPtr{public: CheckedPtr(int* b, int* e): beg(b), end(e), curr(b) {}public: CheckedPtr&原创 2012-04-27 12:52:37 · 3144 阅读 · 0 评论 -
自定义自加自减下标解引用等问题--围绕CheckedPtr类 续14.26题
pe14_26_2.cpp//dui 26题的优化适当的const保护,还有操作符函数的定义顺序最好遵从声明顺序,看起来清晰一点#include"head.h"//版本二,优化加减法判断问题,我要把加负数的情况直接转化为调用减法,反之相反//调用相反操作符时传递参数要注意,传入(0 - change)有个转化class CheckedPtr{public: CheckedP原创 2012-04-27 16:39:05 · 1530 阅读 · 0 评论 -
调用操作符和函数对象
p451-p467今天不看完第三部分不睡觉~!!!!!!!!!!!!!!!!!!日,明天还要爬山。。简单说来,就是可以把对象当成函数看//函数对象,#include"head.h"struct absInt{ int operator() (int val){//求绝对值 return val < 0 ? -val : val; } };int main()原创 2012-04-27 22:28:59 · 2407 阅读 · 1 评论 -
标准库定义的函数对象--接“将函数对象用于标准库算法”
标准库头文件中定义了一组类似于前边的GT_cls的函数对象。奇怪的是不需要include(mark)有一元函数对象:一元减minus和逻辑非logical_not其余都是二元函数对象一个简单实例:chap/functionObject.cpp#include"head.h"//#includeint main(){ std::plus intAdd;//fun原创 2012-04-28 01:37:59 · 1017 阅读 · 0 评论 -
将函数对象用于标准库算法
标准库函数对象,eg.equal_to适配器eg. bind2nd(less_equal(), 10)not1(bind2nd(less_equal(),10))//函数对象的函数适配器#include"head.h"int main(){ //绑定器binder:bind1st,bind2nd;绑定一个现成的实参到二元函数对象函数第一个或第二个参数,使之变成一元函数原创 2012-04-29 00:04:21 · 1248 阅读 · 0 评论 -
转换与类类型
转换操作符//类类型转换、转换操作符#include"head.h"class SmallInt{public: SmallInt(int i = 0): val(i){ if(i 255) throw std::out_of_range("Bad SmallInt initializer"); } //期待不合格——id 在输入的末端?~类末端老忘了分原创 2012-04-29 14:40:47 · 1267 阅读 · 0 评论 -
第四部分:十五章 面向对象编程:派生
基本概念接触基类与派生类,虚函数,多态,动态绑定思想:共同点做基类的公共部分,保留每个派生类都具有的共性,然后根据各自特点override原来的virtual函数(成员),代码重用吧也算dynamicBinding.cpp//定义基类base class,虚函数virtual,protected权限,虚析构函数virtual destructor,动态绑定dynamic原创 2012-04-29 16:47:15 · 1212 阅读 · 0 评论 -
virtual与其他成员函数--《C++ primer》 笔记
从派生类到基类的转换基本使用方法:double print_total(const Item_base&, size_t){std::cout << "test" << std::endl; return 0.3;} //function with an Item_base reference parameter Item_base item; //object o原创 2012-04-30 01:14:12 · 1492 阅读 · 1 评论 -
公有、私有和受保护的继承--《C++ primer》笔记
protectedInheritance.cpp间接继承和书本描述不一致,书上说因为第一重继承变private,第二重继承才无法访问Base::i~是private,现实是提示Base::i是protected,好像跳过Private_derived类直接找基类了。继承对基类的保护,还是普遍规律,只能越来越严,不能变松。还有,标号不是限制派生类对基类成员(表达不清楚,是基类成员还是从基原创 2012-05-01 01:03:19 · 1975 阅读 · 1 评论 -
友元关系与继承——《C++ primer》笔记,书中的小bug
友元关系,friendship不能继承,书中想表达的意思是这种friendship不能继承是双向的。也就是说,自己朋友的儿子不能访问自己,朋友也不能访问自己的儿子,唯一的关联是朋友和自己但是,书中的代码表达确实是有错误的,如果我的想法是错的,欢迎指正。。。。。。。。。。。。测试代码如下://派生类不能继承友元关系,双向的,既不能享受访问权力也不能被访问#include原创 2012-05-02 11:29:37 · 3155 阅读 · 2 评论 -
继承与静态成员,转换与继承
继承与静态成员,搞不太懂,这些乱七八糟的名词(mark)staticDerived.cppstatic,"整个继承层次只有一个这样的成员,无论从基类派生出多少类,每个static成员只有一个实例"读不太懂,是说不能覆盖之类的吧,对了,覆盖是无视基类部分的成员,还是修改了基类部分?实践证明,virtual和static都可以在派生类中重写函数,并且都不是“覆盖”,通过作用域控制符就可原创 2012-05-02 14:45:01 · 1221 阅读 · 0 评论 -
转换与继承--《C++ primer》笔记
派生类到基类的转换基本上可以直接转,就提取派生类的基类部分就行了,其余的“切掉”(忽略)//派生类和基类的转换,想把派生类对象转成基类对象,基本上是各种直接间接的“复制”,通过copy-constructor 和operator=等形式,把派生类对象的基类部分赋予新对象#includeclass Item_base{};class Bulk_item : public Ite原创 2012-05-03 01:53:32 · 2988 阅读 · 0 评论 -
复制控制和继承--《C++ primer》笔记
复制构造函数和赋值操作符#includeclass Base {public: Base(double t = 1.2) : test(t) {}public: double test; };class Derived : public Base {public://复制构造函数不会自动唤醒 //Base::Base(const Base&) not invoked原创 2012-05-04 00:54:12 · 2209 阅读 · 0 评论 -
继承情况下的类作用域
构造函数和析构函数中的虚函数,构造和析构也是分阶段的,也就是说从无到基类对象,再到派生类对象,从派生类对象到基类对象,再到无。这中间有一个状态就是基类对象,此时直接或间接调用虚函数,只能是基类中的版本,因为后边的还没形成呢。因为如果使用派生类中的版本,可能需要访问派生类对象的成员,而这些还不存在,为了避免这个崩溃风险,就给屏蔽了。继承情况的类作用域:派生类的作用域嵌套在原创 2012-05-04 18:10:49 · 1603 阅读 · 0 评论 -
抽象基类,容器、句柄类与继承--《C++ Primer》笔记
纯虚函数(pure virtual function),包含纯虚函数的类是抽象基类(abstract base class)。不能创建抽象类型的对象(object)。方法,在函数形参表后面写上 = 0,如果写1,error: invalid pure specifier (only ‘= 0’ is allowed) before ‘;’ token使用目的,防止用户建立Disc_item原创 2012-05-05 23:14:17 · 7658 阅读 · 1 评论 -
句柄的使用~接上边句柄定义--《C++ primer》笔记
坐火车了,不学了,今天的绝笔。。。。。。====================================================================================================================================接上边,因为容器管理对象太麻烦,存基类和派生类都不好,指针不好管理,所以要用原创 2012-05-06 16:21:12 · 1764 阅读 · 0 评论