随笔分类 - 2-C++深度解析教程
摘要:1. 什么是抽象类 (1)面向对象中的抽象概念 思考:抽象图形中,图形的面积如何计算? (2)现实中:需要知道具体的图形类型,才能求面积。 (3)Shape只是一个概念上的类型(抽象图形类型),没有具体对象。 2. 面向对象中的抽象类 (1)可用于表示现实世界中的抽象概念 (2)抽象类是一种只能定义
阅读全文
摘要:1. 回归本质 (1)class是一种特殊的结构体(struct) ①在内存中class依旧可以看作变量的集合 ②class与struct遵循相同的内存对齐规则 ③class中的成员函数与成员变量是分开存放的。即每个对象有独立的成员变量,所有对象共享类中的成员函数。 (2)值得思考的问题:两者相等
阅读全文
摘要:1. 函数重写回顾 (1)父类中被重写的函数依然会继承给子类 (2)子类中重写的函数将覆盖父类中的函数 (3)通过作用域分辨符(::)可以访问到父类中的函数 Child c; Parent* p = &c; c.Parent::print(); //从父类中继承 c.print(); //在子类中重
阅读全文
摘要:1. 类型转换函数 (1)C++类中可以定义类型转换函数 (2)类型转换函数用于将类对象转换为其它类型 (3)语法规则: operator Type() //重载类型运算符 { Type ret; //…… return ret; } 【编程实验】类型转换函数初探 42-1.cpp #include
阅读全文
摘要:1. 再论类型转换 (1)标准数据类型之间会进行隐式的类型安全转换 (2)转换规则: 【实例分析】有趣的隐式类型转换 41-1.cpp #include <iostream> using namespace std; int main() { short s ='a'; unsigned int u
阅读全文
摘要:1. ++i和i++真的有区别吗? (1)现代编译器会对代码进行优化 对于基础类型,前置++和后置++的汇编代码几乎是一样的,最终效率完全一样。 (2)优化使得最终的二进制程序更加高效 (3)优化后的二进制程序丢失了C/C++的原生语义 (4)不可能从编译后的二进制程序还原C/C++程序 【编程实验
阅读全文
摘要:1. 逗号操作符(,) (1)逗号表达式用于将多个子表达式连接为一个表达式 (2)逗号表达式的值为最后一个子表达式的值 (3)逗号表达式的前N-1个子表达式可以没有返回值 (4)逗号表达式按照从左向右的顺序计算每个子表达式的值 exp1,exp2,exp3,…,expN; 【实例分析】逗号表达式的示
阅读全文
摘要:1. 逻辑运算符的原生语义 (1)操作数只有两种值(true和false) (2)逻辑表达式不用完全计算就能确定最终值 (3)最终结果只能是true或false 【编程实验】逻辑表达式 38-1.cpp #include <iostream> using namespace std; int fun
阅读全文
摘要:1. 永恒的话题:内存泄漏 (1)动态申请堆空间,用完后不归还 (2)C++语言中没有垃圾回收的机制 (3)指针无法控制所指堆空间的生命周期 【编程实验】内存泄漏 37-1.cpp #include <iostream> #include "IntArray.h" using namespace s
阅读全文
摘要:1. 关于赋值的疑问 (1)疑问 ①编译器为每个类默认重载了赋值操作符 ②默认的赋值操作符仅完成浅拷贝 ③当需要进行深拷贝时必须重载赋值操作符 ④赋值操作符与拷贝构造函数有相同的存在意义 【编程实验】默认赋值操作符重载 36-1.cpp #include <iostream> using names
阅读全文
摘要:1. 为什么需要函数对象 (1)案例 ①编写一个函数,使函数可以获得斐波那契数列每项的值。 ②每调用一次返回一个值 ③函数可根据需要重复使用 【编程实验】第一个解决方案 35-1.cpp #include <iostream> using namespace std; int fib() { sta
阅读全文