
c++面向对象高级编程
文章平均质量分 72
沉迷cpp无法自拔的猪
勿在浮沙筑高台
展开
-
转换函数与显式构造
转换函数,谁把谁转成什么呢。再考虑一下这个函数出现的位置,我们就可以知道,把一个class转换为另一种类型,这种类型可以自己来定义。class A{public: A(int num,int den = 1):num(num),den(den){} operator double() const{//转换函数不可能去改变里面的数据,所以const return (原创 2017-12-10 11:12:03 · 243 阅读 · 0 评论 -
object Model(对象模型):关于vptr和vtbl
这里设置了3个class,A,B,C之间是继承的关系,A有之间的data1和2,B继承了A,有了A的数据,然后加上自己的数据,C也是。如果一个类里面有一个虚函数,这个对象里面就会多了一个指针,指向虚函数表。如果父类有虚函数,子类一定有,会继承父类虚函数的调用权,这时候以B为例子,B推翻了vfunc1()重载了,留下了vfunc2().vptr关联了vtbl(里面都是函数指针)然后关联了原创 2017-12-17 16:41:20 · 1159 阅读 · 0 评论 -
数量不定的模板参数、auto、for的新形式、reference
1、variadic template(c++11)void print(){}templatevoid print(const T& firstArg,const Types&... args){ cout << firstArg << endl; print(args...);}测试代码:print(7.5,"hello",bitset(377),42);...在这里表原创 2017-12-17 14:55:39 · 431 阅读 · 0 评论 -
以简单的设计模式代码阐述如何设计委托
先来看看composite组合模式下,是怎么实现委托的,如果现在面对一个问题,file system,有目录,目录里可以放文件,目录还能和其他的文件结合在一起放在另外的目录里面,这时候需要写个个体,需要一个组合物,这个组合物应该可以容纳组合物和个体,那么如何做到,一个容器容纳2个不同的东西,除非他们是is a拥有父类,这样其实就是属于同一种东西,只是不同的表现罢了,所以由如下的关系图:clas原创 2017-12-04 22:26:10 · 229 阅读 · 0 评论 -
侯捷老师的虚函数和多态小结
一个类中成员函数分为3种:non-virtual:不希望派生类对其进行重写(override).virtual:希望派生类对其进行重写(override).pure-virtual(纯虚函数):希望派生类一定要对其进行重写class Shape{public: virtual void draw() const =0;//pure-virtual virtual原创 2017-12-04 18:48:39 · 526 阅读 · 0 评论 -
面向对象编程的3种关系:组合,委托和继承
看了侯捷老师一节课的视频,做一个记录和小结,在OOP语言中,面向对象编程,类和类之间有3种关系:1)Inheritance(继承)2)Composition(复合)3)Delegation(委托)先从Compositon开始讲起,其实在C语言中也见到过,一个结构体里面包含另外一个结构体,在C++中复合也是一样的,侯捷老师以标准库来形象的说明了这种情况,在queue类中包含了dequ原创 2017-12-03 22:10:00 · 5188 阅读 · 0 评论 -
浅谈static、类模板和函数模板
首先,我们先来看static,从C语言我们知道,他是一个静态变量的标识符,可以让一个变量在离开作用域后,还能够存活。那么如果我们在类当中定义了一个static数据会怎么样,这个static数据会在程序开始前就会存在,而且仅此一份。那么static function呢,简而言之就是,操纵static变量的函数,举个例子,现在我们要计算一个基金增长利率,那么这个利率对于所有的对象来说,都是一样的,那么原创 2017-12-03 15:31:55 · 2156 阅读 · 0 评论 -
C++编程中类class的编写(二):含指针数据的类
从上一篇文章一中,我们提到过编写的类分为2种,在这里再对含指针数据的类来进行考量,对于含指针数据的类,必须要进行自己编写拷贝构造和拷贝赋值(为了防止浅拷贝也就是2个对象的指针数据指向同一块内存单元),同时也必须使用析构函数(对于指针进行了new或者malloc进行动态分配,必须回收资源),那么由此以编写简单的string类做一个总结:class String{private: char*原创 2017-12-03 11:24:29 · 629 阅读 · 0 评论 -
C++编程中类CALSS的编写(一):不含指针数据的类
首先,在我理解当中,C++编程中的类可以分为两种类型,第一种是包含指针的,另一种则是不包含的,不包含指针的类,其中private里填写自己的数据,这时候其中的数据类型比如int,double,float等等类型都是标准库里面已经写好的,也自动为我们分配了内存,不用去考虑内存分配问题,也就不会有别名的问题产生,当然此时,析构函数也不用编写了,在程序结束的时候,自动析构。此时主要编写的程序有构造函数,原创 2017-12-02 17:55:16 · 605 阅读 · 0 评论 -
观侯捷老师new和delete以及malloc在vc当中调试模式和运行下分配内存
在讲到new和delete不得不想到c语言中的malloc and free 以及其经常用于动态内存分配,而简单来说,动态内存分配在堆中,不会因为离开作用域而删除,而栈中存储的一般为函数参数,返回值以及作用域下的local orient.那我们可想而知的是,在函数中如果我创建指针,肯定为了不浪费内存,我们选择动态分配内存的方式,那么就是利用C++中的new或者c中的malloc,我们需要养成一原创 2017-12-02 19:53:10 · 709 阅读 · 5 评论 -
成员模板、模板的偏特化和特化、模板模板参数
成员模板就是在一个类里面再声明一个模板,一般来说这个模板是为了能够在类里面实现利用派生类对其进行一个初始化。为了设计一个构造函数,以pair为例子。利用派生类鲫鱼和麻雀,来构造父类的对象,鱼类和鸟类。这就是成员模板在标准库里的用途。模板的特化:template struct hash{};//泛化template<>//特化struct hash{ size_t o原创 2017-12-10 14:44:06 · 727 阅读 · 1 评论 -
智能指针(pointer like class)和仿函数(function like class)
智能指针的语法使用,*以及->重载,仿函数的形式原创 2017-12-10 13:19:30 · 636 阅读 · 0 评论 -
new和delete续
new和delete的重载和示例,多参数的重载及示例,string类当中的应用原创 2017-12-17 19:27:57 · 238 阅读 · 0 评论