随笔分类 -  C++学习

1
摘要:1、C语言存在的问题 C语言不支持真正意义上的字符串 C语言用字符数组和一组函数实现字符串操作 C语言不支持自定义类型,无法获得字符串类型 C++可以通过类完成字符串类型的定义,但是原生类型系统并没有包含字符串类型,而是在 库中。 但是不同的应用中,可能会使用不同的库。 2、字符串类的设计 类继承自 阅读全文
posted @ 2018-09-26 10:33 小胖鼠 阅读(246) 评论(0) 推荐(0)
摘要:1、关于析构的疑问 单个对象创建时构造函数的调用顺序: 1. 调用父类的构造过程 2. 调用成员变量的构造函数(调用顺序与声明顺序相同) 3. 调用类自身的构造函数 析构函数与对应的构造函数的调用顺序相反 关于析构 对于栈对象和全局对象,类似于入栈和出栈的顺序,最后构造的对象被最先析构!! 堆对象的 阅读全文
posted @ 2018-09-25 21:03 小胖鼠 阅读(126) 评论(0) 推荐(0)
摘要:思考: 构造函数是一个特殊的函数 是否可以直接调用? 是否可以在构造函数中调用构造函数? 直接调用构造函数的行为是什么? 答: 直接调用构造函数将产生一个临时对象 临时对象的生命周期只有一条语句的时间 临时对象的作用域只在一条语句中 临时对象是C++中值得警惕的灰色地带 编译器的行为:现代C++编译 阅读全文
posted @ 2018-09-25 20:44 小胖鼠 阅读(273) 评论(0) 推荐(0)
摘要:1、对象销毁 C++中如何清理需要销毁的对象? 一般而言,需要销毁的对象都应该做清理,解决方案: 为每个类都提供一个 的`free()`函数 对象不再需要时立即调用 函数进行清理 存在的问题: 只是一个普通函数,必须显示调用 对象销毁前没有做清理,很可能造成资源泄露 C++编译器是否能够自动调用某个 阅读全文
posted @ 2018-09-25 20:21 小胖鼠 阅读(135) 评论(0) 推荐(0)
摘要:C++中的类可以定义多个对象,对象的构造顺序是怎样的? 1、对象的构造顺序一 对于局部对象:当程序执行流到达对象的定义语句时进行构造:对象定义 构造 c++ include class Test { private: int mi; public: Test(int i) { mi = i; pri 阅读全文
posted @ 2018-09-25 20:08 小胖鼠 阅读(240) 评论(0) 推荐(0)
摘要:1、类中定义 成员,及其初始化 如何初始化类里面的 成员? 首先考虑构造函数初始化 于是出现了初始化列表 C++中提供了初始化列表对成员变量进行初始化 语法规则: 通过初始化列表对ci 进行初始化 类成员的初始化, 注意事项: 成员的初始化顺序与成员的申明顺序相同 成员的初始化顺序与初始化列表中的位 阅读全文
posted @ 2018-09-25 19:54 小胖鼠 阅读(471) 评论(0) 推荐(0)
摘要:1、函数定义时指定默认参数 在C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值。也就是说,调用函数时可以省略有默认值的参数。如果用户指定了参数的值,那么就使用用户指定的值,否则使用参数的默认值。 所谓默认参数,指的是当函数 阅读全文
posted @ 2018-09-15 16:25 小胖鼠 阅读(14905) 评论(0) 推荐(3)
摘要:1、成员变量的初始值 2、对象的初始化 从程序设计的角度,对象只是变量,因此: 在栈上创建对象时,成员变量初始为随机值 在堆上创建对象时,成员变量初始为随机值 在静态存储区创建对象时,成员变量初始为0 静态存储区包括了全局变量和 修饰的局部变量 需要解决的问题:使类的成员变量不管在哪个存储区进行定义 阅读全文
posted @ 2018-09-13 22:40 小胖鼠 阅读(125) 评论(0) 推荐(0)
摘要:1、类的封装 C++中类的封装: 成员变量:C++中用于表示类属性的变量 成员函数:C++中用于表示类行为的函数 C++中可以给成员变量和成员函数定义访问级别 :成员变量和成员函数可以在类的內部和外界访问和调用 :成员变量和成员函数只能在类的内部被访问和调用 2、类成员的作用域 类成员的作用域: 类 阅读全文
posted @ 2018-09-11 11:08 小胖鼠 阅读(257) 评论(0) 推荐(0)
摘要:1、面向对象基本概念 面向对象的意义在于: 将日常生活中习惯的思维方式引入程序设计中 将需求中的概念直观的映射到解决方案中 以模块为中心构建可复用的软件系统 提高软件产品的可维护性和可扩展性 类和对象是面向对象中的两个基本概念 类:指的是类事物,是一个抽象的概念 对象:指的是属于某个类的具体实体 类 阅读全文
posted @ 2018-09-11 10:56 小胖鼠 阅读(141) 评论(0) 推荐(0)
摘要:1、关于 的疑问 什么时候为只读变量,什么时候是常量 常量的判别准则: 只有用字面量初始化的 常量才会进入符号表 使用其它变量初始化的 常量仍然是只读变量 被 修饰的 常量不会进入符号表 在编译期间不能直接确定初始值的 标识符,都被作为只读变量处理 引用的类型与初始化变量的类型 相同:初始化变量成为 阅读全文
posted @ 2018-09-11 10:45 小胖鼠 阅读(130) 评论(0) 推荐(0)
摘要:1、强制类型转换 1.1 C方式的强制类型转换 C方式强制类型转换存在的问题 过于粗暴:任意类型之间都可以进行转换,编译器很难判断其正确性 难于定位:在源码中无法快速定位所有使用强制类型转换的语句 C语言的强制类型转换已经足够简单了,如果从语法上进行改进,产生的新的语言,必然没办法兼容原来的语言,所 阅读全文
posted @ 2018-09-11 10:44 小胖鼠 阅读(130) 评论(0) 推荐(0)
摘要:1、C++中的动态内存分配 通过 关键字进行动态内存申请 C++中的动态内存申请时基于类型进行的 关键用于内存释放 C语言其实是不支持动态内存分配的,是通过 库函数来实现的,可能有一些硬件根本不支持 ;而C++ 是一个关键字,不管在任意编译器上,任意硬件平台上都是能够进行动态内存分配的,这是本质区别 阅读全文
posted @ 2018-09-11 10:43 小胖鼠 阅读(286) 评论(0) 推荐(0)
摘要:1、重载的概念 重载(Overload) 同一个标识符在不同的上下文有不同的意义 2、C++中的函数重载 函数重载(Function Overload) 用同一个函数名定义不同的函数 当函数名和不同的参数搭配时函数的含义不同 函数重载至少满足下面的一个条件: 参数个数不同 参数类型不同 参数顺序不同 阅读全文
posted @ 2018-09-11 10:41 小胖鼠 阅读(196) 评论(0) 推荐(0)
摘要:修正说明:以下关于函数参数只能在函数声明中指定的观点不正确,具体参考文章:函数默认参数补充 1、函数参数的默认值 C++中可以在函数 声明时 为参数提供一个默认值,当函数调用时没有提供参数的值,则使用默认值 参数的默认值必须在 问题:函数定义中是否可以出现参数的默认值? 当函数声明和定义中的参数默认 阅读全文
posted @ 2018-09-11 10:37 小胖鼠 阅读(169) 评论(0) 推荐(0)
摘要:1、常量与宏 中的 常量可以替代宏常数定义: 我们还可以利用宏来定义宏代码片段: C++ define FUNC(a, b) ((a) // 宏代码块,比较两个数的大小 define FUNC(a, b) ((a) //__forceinline //__attribute__((always_in 阅读全文
posted @ 2018-09-11 10:34 小胖鼠 阅读(314) 评论(0) 推荐(0)
摘要:1、引用的意义 引用作为 而存在,因此在一些场合可以替代指针,引用相对于指针来说具有更好的可读性和实用性 注意: 函数中的引用形参不需要进行初始化,初始化是在调用的时候完成的 2、特殊的引用 在C++中可以声明 引用,具体用法如下: 引用让变量拥有只读属性,这个只读属性是针对当前的这个别名,变量是可 阅读全文
posted @ 2018-09-10 22:52 小胖鼠 阅读(178) 评论(0) 推荐(0)
摘要:1、布尔类型 C++中的布尔类型 C++在C语言的基本类型系统之上增加了 C++中的 可取的值只有 和`false` 理论上 之占用一个字节 注意: 代表真值,编译器内部用1来表示 代表非真值, 编译器内部用0来表示 C语言中: 用整型值来代替 类型,常用 C++做了类型增强,增加了一个非常严谨的 阅读全文
posted @ 2018-09-10 22:47 小胖鼠 阅读(233) 评论(0) 推荐(0)
摘要:1、C语言中的 : 修饰的变量是只读的,本质还是变量 修饰的局部变量在栈上分配空间 修饰的全局变量在只读存储区分配空间 只在编译期有用,在运行期无效 不能定义真正意义上的常量 修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边。 局部变量是在栈上分配空间,可以通过指针改变这个空间 阅读全文
posted @ 2018-09-10 22:44 小胖鼠 阅读(172) 评论(0) 推荐(0)
摘要:C++ 的加强主要表现在:类型的加强、面向对象支持 1、C++改进 C++更强调语言的实用性,所有的变量都可以再需要使用的时候再定义,C语言中的变量都必须在作用域开始的位置定义 C++ int c = 0; for (int i = 1; i register 关键字请求编译器将局部变量存储与寄存器 阅读全文
posted @ 2018-09-10 22:39 小胖鼠 阅读(321) 评论(0) 推荐(0)

1