C++进阶剖析
海是倒过来的天001
这个作者很懒,什么都没留下…
展开
-
C++进阶剖析( 二十六)之数组类模板
1.1 理论1.1.1 模板参数可以是数值型参数(非类型参数)template <typename T ,int N>void func(){ T a[N]; //使用模板参数定义局部数组}func<double,10>();1.1.2 数值型模板参数的限制变量不能作为模板参数浮点数不能作为模板参数类对象不能作为模板参数本质: 模板参数是在...原创 2020-03-29 11:06:13 · 155 阅读 · 0 评论 -
C++进阶剖析( 二十五)之类模板
1.1 类模板1.1.1思考在C++中是否能够将泛型的思想应用于类?1.1.2一些类主要用于存储和组织数据元素类中数据组织的方式和数据元素的具体类型无关如: 数组类,链表类,Stack类,Queue类等C++中将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能1.1.3 C++中的类模板以相同的方式处理不同的类型在类声明前使用templ...原创 2020-03-29 10:04:34 · 143 阅读 · 0 评论 -
C++进阶剖析( 十 八)之其他操作符
1.1 逻辑操作符1.1.1 逻辑运算符的原生意义操作数只用两种值(true 和 false)逻辑表达式不用完全计算就能确定最终值(短路规则)最终结果只能是true或者 false1.1.2 原生语义举例int func(int i){ cout<<"int func(int i) : i= "<< i<<endl; return i;...原创 2020-03-26 22:17:47 · 115 阅读 · 0 评论 -
C++进阶剖析( 十 六)之字符串类,数组访问操作符,经典问题三
1.11.1.11.1.21.1.31.21.2.11.2.21.2.31.3实例1.3.11.3.21.3.31.41.4.11.4.21.4.31.51.5.11.5.21.5.3参考一 :狄泰软件学院C++进阶剖析参考二 : C++ primer中文版原创 2020-03-24 20:00:33 · 201 阅读 · 0 评论 -
C++进阶剖析( 十 五)之操作符重载
1.1 复数类1.1.1案例引出1.1.2 解决一:实例代码下面的代码使用了 友元语法。#include <stdio.h>#include <stdlib.h>#include <string.h>class Complex{private: int mi; int mj;public: Complex(int i=0 ,int...原创 2020-03-22 18:00:58 · 103 阅读 · 0 评论 -
C++进阶剖析( 十 二)之静态成员变量和静态成员函数
1.1 1.1.11.1.21.1.31.21.2.11.2.21.2.31.3实例1.3.11.3.21.3.31.41.4.11.4.21.4.31.51.5.11.5.21.5.3参考一 :狄泰软件学院C++进阶剖析原创 2020-03-22 10:57:14 · 93 阅读 · 0 评论 -
C++进阶剖析(八)之封装
1.1封装基本思考 1.1.1 思考学习电脑组装需要多少时间?学习电脑组装是否需要学习显示器,键盘,鼠标,主板,内存等部件的设计和制造?1.1.2 类通常分为以下两个部分类的实现细节类的使用方式开发者需要考虑类的具体实现细节,而使用者只需要考虑这个类的使用方式。例如普通用户使用手机 :只需要学习如何发短信,打电话,拍照等手机开发工程师 需要考虑手机内部的实现细节...原创 2020-03-21 15:47:34 · 125 阅读 · 0 评论 -
C++进阶剖析(七)之面向对象思想
1.1面向对象思想引出1.1.1OO思想引出在日常生活中,我们经常对事物进行分类,比如常见的分类方法:12星座,图书馆中不同类型的书籍放在不同的楼层中。那我们能不能将这种分类的思想引入到计算机程序设计呢?这种思想就是OO思想1.1.2面向对象设计意义根据用户需求直接映射到程序解决方案中将生活中的习惯的思维引入到程序设计中以模块为中心形成可复用的软件系统(每个小的模块都是一个类别)...原创 2020-03-21 09:42:53 · 232 阅读 · 0 评论 -
C++进阶剖析(二十四)之函数模板
1.1泛型编程 1.1.1 概念不考虑具体数据类型的编程方式1.1.2 语法规则template 关键字用于声明开始进行范式编程typename关键字用于声明泛指类型template <typename T>void swap(T&a,T&b){T c =a;a =b;b =c;}1.2 深度理解函数模板1.2.1 函数模板深入...原创 2019-05-29 20:31:11 · 151 阅读 · 0 评论 -
C++进阶剖析(二十三)之 问题解析四
1.1 问题一1.1.1 new 和malloc 的区别new 关键字是C++的一部分malloc是由C库提供的函数(如果没有C库就不能申请内存空间)new 是以具体类型为单位进程内存分配malloc 以字节为单位进程内存分配new 在申请内存空间的时候可进行初始化malloc 仅仅根据需要申请定量的内存空间1.1.2 实例代码#include <iostream&g...原创 2019-05-28 22:42:13 · 142 阅读 · 0 评论 -
C++进阶剖析(二十二)之抽象类和接口
1.1抽象类1.1.1案例引出现实生活中有很多的类,比如图形这个类,图形又包括矩形和三角形等。在进行面向对象分析的时候,会发现一些抽象的概念,比如图形类的面积怎么计算。现实中需要知道具体的图形(Shape)类型才能求面积,所以对概念上的图形求面积是没有意义的。1.1.2 那么Shape类还有存在的意义吗?面向对象是对现实世界的一种描述,如果这个Shape类不存在,对现实世界的描述就是不完...原创 2019-05-28 22:41:53 · 254 阅读 · 0 评论 -
C++进阶剖析(三)之新型类型转换
备注: 后面看到 类,继承,虚函数的时候继续来补充。1.1 C语言中强制类型转换1.1.1 示例(Type )(Expression)1.1.2 C方式强制类型转换存在的问题过于粗暴(1) 任意类型之间都可以进行转换,编译器很难判断其正确性难以定位(1) 在源码中无法快速定位所有使用强制类型转换的语句1.1.3 如何才能更安全的转换呢C++ 中将强制类型转换分成了...原创 2019-05-23 20:08:53 · 134 阅读 · 0 评论 -
C++进阶剖析(二十一)之对象模型分析
1.1对象模型分析1.1.1 对象模型分析的本质C++中的对象分为两个部分:对象的成员变量和对象的成员函数,对象模型分析就是对对象的成员变量和成员函数进行分析。1.1.2类对象的本质class 是一种特殊的struct在内存中class依旧可以看做变量的集合class 与struct 遵循相同的内存对齐规则class中的成员变量和成员函数是分开存放的(1)每个对象都有独立的成员变...原创 2019-05-28 07:21:11 · 153 阅读 · 0 评论 -
C++进阶剖析(二)之引用的本质分析和三目运算符
1.1 三目运算符1.1.1int main(){ int a =1; int b =2; (a < b ? a:b) =3; //在c++中是成立的 printf("a= %d\n",a); printf("b= %d\n",b); return 0;}1.1.2三目运算符在C语言和C++中的比较在C语言中三目运算符只能作为右值使用在C++中三目...原创 2019-05-22 21:08:15 · 387 阅读 · 0 评论 -
C++进阶剖析(四 )之内联函数
1.1类比引出内联函数1.1.1 宏定义常量C语言中通过#define 宏定义来定义一个常量,宏定义常量是由预处理器来进行处理的,编译器是看不到的。仅仅是进行了简单的替换。C++中通过const 定义常量,可以来代替宏定义,const 常量由编译器进行处理,进行了类型检查,和作用域检查。1.1.2宏定义代码段C语言中通过#define 宏定义来定义一个代码段,这个代码段由预处理器来进行处...原创 2019-05-24 20:47:02 · 163 阅读 · 0 评论 -
C++进阶剖析(五 )之函数参数扩展
1.1 函数参数默认值1.1.1 函数默认值C++中可以为函数参数提供默认值,当调用函数的时候,如果不提供为这个参数提供值,就会使用默认值。1.1.2示例程序int mul(int x =0);int main(){ printf("%d\n",mul()); // 0 printf("%d\n",mul(1)); // 1 printf("%d\n",mul(2));...原创 2019-05-25 15:28:58 · 149 阅读 · 0 评论 -
C++进阶剖析( 九)之对象的构造和销毁
1.1构造函数1.1.1构造的引出1.1.21.1.31.21.2.11.2.21.2.31.3实例1.3.11.3.21.3.31.41.4.11.4.21.4.31.51.5.11.5.21.5.3参考一 :狄泰软件学院C++进阶剖析原创 2019-05-25 10:42:28 · 311 阅读 · 0 评论 -
C++进阶剖析( 十)之对象的初始化列表和对象的构造顺序
1.1 const 变量作为类的成员函数1.1.1 const 变量作为类的成员函数示例代码 class Test{private: const int a;public: Test(int i):a(i) // 通过初始化列表的形式对const 只读变量进行初始化 { }}; int main() { Test t1(10); return 0; }总结...原创 2019-05-25 11:39:59 · 195 阅读 · 0 评论 -
C++进阶剖析( 十 一)之临时对象和const对象
1.11.1.1析构函数作用堆上分配内存用delete销毁对象,栈上生成对象,对象在生命周期结束后销毁,然后调用析构函数进行清理。析构函数是为了清理而不是销毁对象的,在创建对象的时候,如果调用了系统资源(如new 一个对象),这样我们在销毁对象的时候就必须释放这个资源,如果我们手工释放的时候,我们可能在写了一堆代码的时候忘记释放资源了,这时候就有了内存的泄漏,这时候就需要自定义析构函数来进行...原创 2019-05-25 16:09:50 · 195 阅读 · 0 评论 -
C++进阶剖析(一)之const关键字
1.1const 在C语言中的表现1.1.1 const 修饰变量const 修饰的变量是只读的,本质还是变量const 修饰的局部变量在栈上分配内存const 修饰的全局变量在全局数据区分配内存const 只在编译期间有效,在运行期无效。注意:注意:注意:const 修饰的变量不是真正的常量,而是告诉编译器,const修饰的变量不能出现在赋值符号的左边。 1.1.2 编译器方面...原创 2019-05-21 21:40:00 · 200 阅读 · 0 评论 -
C++进阶剖析( 十 三)之二阶构造
1.11.1.11.1.21.1.31.21.2.1实例代码#include <stdio.h>#include <stdlib.h>#include <string.h>class Test{private: char * name; int age; Test(int age) { this->age =age; ...原创 2019-05-25 19:40:06 · 140 阅读 · 0 评论 -
C++进阶剖析( 十 四)之 类中函数重载和函数重写
1.1 函数重载1.1.1函数重载分析函数重载的本质是相互独立的不同函数。(重要)C++ 中通过函数名和函数参数确定函数调用无法直接通过函数名得到重载函数的入口地址函数重载必然发生在同一个作用域。1.1.2 类中成员函数可以进行重载构造函数之间可以进行重载普通成员函数之间也可以进行重载静态成员函数之间也可以进行重载那么普通成员函数和静态成员函数之间可以进行重载吗?可以...原创 2019-05-25 20:37:13 · 187 阅读 · 0 评论 -
C++进阶剖析( 十 七)之函数对象分析和智能指针
1.1 问题引出1.1.1 需求编写一个函数需要满足下面条件函数可以获得斐波那契数列的每一项的值每调用一次返回一个值函数可根据需要重复使用for(int i =0 ;i< 10;i++){cout<< fib() <<endl;}1.1.2 解决方案#include <iostream>using namespace std;...原创 2019-05-26 10:25:10 · 140 阅读 · 0 评论 -
C++进阶剖析(十 九)之继承
1.1 继承是非常重要的,在面向对象编程中有着举足轻重的地位。尤其是在设计模式中。1.1.1 生活中的继承龙生龙,凤生凤,老鼠儿子会打洞。生活中的继承是一种长相和行为的继承。1.1.2 类之间的关系组合关系(思想很重要)一台电脑有CPU,主板,显示器等组成继承关系(思想很重要)电脑分为惠普,联想等(is a )1.1.3 1.2 类的组合关系1.2.1代码实例电...原创 2019-05-26 15:07:34 · 1120 阅读 · 0 评论 -
C++进阶剖析(二十)之多态
1.1 多态引出1.1.1 重写父类中被重写的函数依然会继承给子类子类中重写的函数将覆盖父类中的函数通过作用域分辨符(::)可以访问到父类中的函数子类中为啥要重写父类中定义的函数呢?因为父类中的这个函数不满足子类的需求Child c;Parent * p =&c;c.Parent::print() // 调用父类中的print函数c.print(); //调用子类...原创 2019-05-26 19:21:46 · 101 阅读 · 0 评论 -
C++进阶剖析(六 )之函数重载
1.1 函数重载1.1.1 满足条件参数个数不同参数类型不同参数顺序不同备注: 与返回值类型无关1.1.2 代码实例#include <stdio.h>#include <string.h>#include <stdlib.h>int func(int a ,int b){ return a+b;}int func(int a)...原创 2019-05-24 20:46:05 · 178 阅读 · 0 评论