访问说明符&继承关系总结
public、private、protected
1. 默认为private
实现重用
面向对象最主要的目的是代码重用,重用最直接的方法是直接使用一个类的对象,即将一个类的对象作为现有类的成员。
组合(聚合)即任意数量的和类型的其他对象组成新类
成员的变化,不会影响到其他现有的代码
1.5 继承:重用接口
父类的变化会影响到继承的派生类
派生类继承了父类的接口,父类的私有成员,派生类是不能访问的,重要的是派生类复制了基类的接口,也就是说,即可以向基类对象发送消息,也可以向派生类发送消息。
派生类继承与基类,可以看成是基类与派生类是相同的类型,因为派生类具有和基类相同的接口。区分派生类和基类的方法:
第一种,简单直接地向派生类添加成员和新的函数,这些函数不是基类接口的一部分;
第二种方法,改变已经存在的基类函数的行为,即重载基类的函数
is-a关系:派生类单纯的继承基类,可以从基类访问派生类
is-like-a关系:派生类添加了新的接口元素,扩展了接口并创建了新类型,派生类依然可以从基类访问,但是新添加的接口是无法访问的
1.6 具有多态性的可互换对象
程序员常常不想把对象看做是一种特殊类型的成员,而是想把它看做基本类型成员,允许不依赖与特殊类型的程序代码。
非OOP编译器产生的函数调用会导致被调用代码的早捆绑;OOP是直到运行时编译器才决定执行代码的地址,即晚捆绑
这种多态性是用关键字virtual声明他希望某个函数具有晚捆绑的灵活性。默认情况下类的成员函数不具有动态捆绑的功能,通过virtual声明的函数,可用于表示相同家族的类具有不同的行为。多态性即是产生不同行为的原因。
栈、静态存储区、动态存储区:静态存储区,程序编译完成后的变量(全局、静态变量)存储的位置,栈,运行过程的局部变量;动态存储区,即堆,动态分配内存,显示分配和释放,C里面使用的malloc和free,C++是new
和delete
2.1.1解释器
解释器——解释器将源代码化成一组动作(可由多组机器指令组成)并立即执行这些动作,例如,BASIC就是一个流行的解释性语言。传统BASIC解释器一次翻译和执行一行。Python解释器是将整个程序转化为某种中间语言,然后由执行速度更快的解释器来执行。
编译器——直接将源代码转化为汇编语言或机器指令。C语言是分别使用编译器编译隔断程序,最后使用链接器将各段程序连接成一个完整的可执行程序。这个过程为分段编译。
编译过程:预处理器——一个简单的处理程序,将定义好的模式代替源码中的模式
编译一般分为两遍:第一,对预处理过的代码进行语法分析
第二遍,有代码生成器遍历语法分析树,将树中的每个节点转化为汇编语言或机器代码。如果代码生成器生成的是汇编语言,那么必须用汇编器对其进行汇编。最终生成目标模块
第一遍与第二遍之间也可以使用代码优化器进行代码优化,生成更短、更快的代码
连接器——把一组目标模块连接为一个可执行程序,操作系统可以装载和运行它。连接器能够搜索lib,lib将一组目标模块包含在一个文件中,lib可以由库管理器(libarian)进行创建和维护。
声明与定义
声明——告诉编译器名字/标识符
定义——在此处建立变量/函数,分配空间
C语言中 int func();声明意味着可以带任意参数,任意数目参数
关键字extern用于声明变量,不定义;
extern也作为函数声明的修饰标识,但是不是必须的
c语言标准头文件
在C++中也可以使用
C++标准输入输出类iostream
C++名字空间:namespace关键字
库或程序中的每一个C++定义集被封装在一个名字空间中
using namespace std;
#include means
#inclued
using namespace std;
C++main函数总是返回int型。
C++类库中有一个专门用于处理正文的string类
#include
using namespace std;
文件读写:
读文件,创建ifstream对象;写文件ofstream对象;
getline读取一行到string对象中,以换行符结束;
string对象是动态分配空间的,不用管理内存分配
标准C++库有标准容器类container,这与STL不是一种。
系统头文件limits.h和float.h中定义了不同的数据类型可能存储数据类型的最大值和最小值
基本类型:int float double char
说明符:long short signed unsigned
指针
int * p,p2,p3;means int *p; int p2,p3;
可以解释为*与标识符结合得更紧密
c与C++指针的作用基本上是一样的,但是c++增加了另外一种给函数传递地址的途径引用“&”,引用于指针的不同之处在于,带引用的函数调用比带指针的函数调用在语法构成上更清晰。
局部变量常被称为自动变量,进入作用域时自动生成,离开作用域是自动消失,默认auto关键字说,一般没必要声明auto
寄存器变量,一种局部变量,关键字register,告诉编辑器尽可能快的存取变量,但是不一定变量会被保存在寄存器中,仅仅是对编译器的暗示。register变量不能得到内存地址,只能作为局部变量,即不能作为全局变量和static变量。
静态变量,static关键字,离开作用域就会消失,再次调用是会重建,创建时重新初始化,static变量在作用域范围之外不可用。
static关键字用于函数和外部全局变量时,表明作用域为文件作用域,即其他文件不可使用。
如果一个变量定义时使用了static关键字,其他文件内再使用extern做声明,也是不会生效的,会产生编译错误。
const由C++采用,并加进标准C中。C中编译器对待const和变量相同,只是内容不能更改。
C++中const必须具有初始值
volatile防止编译器做优化
逗号列表,产生的结果是最右边表达式的结果
标准C++提供了显示的转换语法,替换C风格转换
static_cast
const_cast
reinterpret_cast
dynamic_cast
asm关键字:允许在C++程序中写汇编代码,在汇编程序中经常可以引用C++变量,意味着可以方便地与C++代码通信,使用汇编只是用于比较高效的调整或使用特殊的处理器指令。编写汇编语言时使用的语法依赖于编译器。
enum:C的枚举只是将整数值与名字联系起来,并不提供类型坚持;C++需要进行类型检查
调试技巧
#ifdef
assert();测试()内语句,为假则发出错误信息,并且会返回出错函数和相关信息,#include
protected:继承的类可以访问protected成员,单不能访问private成员
友元类/函数:关键字friend
阅读(1865) | 评论(0) | 转发(1) |