C++primer
文章平均质量分 52
人面桃花相映红
BNU student
展开
-
手写智能指针 模板 C++
template <class T> class SmartPointer {public: //普通构造函数, 设定T * ptr的值,并将引用计数设为1 SmartPointer(T * ptr) { ref = ptr; ref_count = new unsigned; *ref_count = 1; } //指针拷贝构造函数,新建一个指向已有对象的智能指针 //需要先设定ptr和ref_count //设为指向sptr的ptr和ref_count //并原创 2021-03-23 16:26:59 · 251 阅读 · 0 评论 -
在头文件中用class声明外来类,用指针或引用代替变量的声明;在cpp文件中包含外来类的头文件
在说这一条款之前,先要了解一下C/C++的编译知识,假设有三个类ComplexClass, SimpleClass1和SimpleClass2,采用头文件将类的声明与类的实现分开,这样共对应于6个文件,分别是ComplexClass.h,ComplexClass.cpp,SimpleClass1.h,SimpleClass1.cpp,SimpleClass2.h,SimpleClass2.cpp。ComplexClass复合两个BaseClass,SimpleClass1与SimpleClass2之间是原创 2021-01-03 14:59:36 · 964 阅读 · 1 评论 -
C++ 类虚函数内存分布
书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来:先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上/d1 reportSingleClassLayoutXXX(XXX为类名),则只会打出指定类XXX..原创 2020-11-12 15:24:50 · 265 阅读 · 0 评论 -
类组合 类指针和类对象的初始化
类的组合 构造函数的用法在一个类中内嵌另一个类的对象作为数据成员,称为类的组合。该内嵌对象称为对象成员,或者子对象。如三角形类Triangle类的内嵌Node类作为数据成员;class Triangle{private: Node *nodei; //对象成员 Node *nodej; Node *nodem;public: ...};在使用过程中,需要着重注意的是对象成员的初始化!如Triangle的构造函数该如何定义?如果一个类具...原创 2020-10-23 16:40:15 · 2363 阅读 · 0 评论 -
C++ primer 学习4
1.因为一个基类的对象可能是派生类的一部分,也可能不是,所以不存在从基类到派生类的自动转换。2.当我们用一个派生类对象为一个基类对象初始化或者赋值的时候,只有该派生类对象中的基类部分会被拷贝,移动,或者赋值,他的派生类部分将会被忽略掉。3.如果虚函数使用默认实参,则基类和派生类中定义的默认实参最好一致。4.有纯虚函数的类为抽象基类,我们不能创造抽象基类的对象。5.进行名字查找时,我...原创 2020-05-07 16:41:02 · 122 阅读 · 0 评论 -
C++primer 相关学习3
1.因为一旦某个形参被赋予了默认值,那么它之后的形参都必须要有默认值。(a) int ff(int a, int b = 0, int c = 0); //正确(b) char *init(int ht = 24, int wd, char bckgrnd); //错误2.constexpr函数的返回值类型及所有形参都得是字面值类型。3.函数匹配void ...原创 2020-05-01 21:19:20 · 240 阅读 · 0 评论 -
C++primer 相关学习1
1.和常量引用一样,所谓的指向常量的指针或者引用没有规定其所指的对象一定要是个常量。所谓指向常量的指针仅仅要求不能通过该指针改变对象的值,但是并没有规定那个对象的值不可以通过其他的方式改变。2.常引用可以对数值进行引用,而引用不可以int i = 10;int &r = i; //okint &r = 0 //no const in &r = 0; ...原创 2020-01-07 20:27:36 · 128 阅读 · 0 评论