C++基础(一)
看了2天的C++面向对象设计,粗略总结一下:C++就像我们的学习英语、日语等语言一样,也是一门语言,不过是计算机识别的语言。所以它有基本的语法、单词和句子。
第一, 程序的基本结构
第二, 数据、运算符、表达式
1、数据:整型(4字节)、字符型(8字节)、浮点数据(4字节)、布尔类型(2字节)
2、运算符:算术:负号—, 加号+ 减号,乘号* 除/ 求余% 加1++ 减1—赋值:+=,-=,/=
关系:<=,>= < > 逻辑:&& ,||,!~ 位运算符:&,!,| ,^ ,- ,>> , <<
3、表达式:算术、关系、赋值、条件、逗号:用逗号将多个表达式连接起来组成的表达式,从左至右依次计算各个表达式的值,并将表达式n的值作为整个逗号表达式的最终值、逻辑
第三,循环和选择
这些就像是语言中的句子一样
1、 循环:
For(; ;);While();Do{}while()
单一、嵌套、多语句//在此不再一一赘述其使用方式,属于基础应用问题。
2、 选择
If……else…或者If …else if ….else if ….. else if ….及Swich (条件) case …break;…defualt
3、 预处理:预处理程序指令实际上是编译器指令,它实现文件包含、简单的字符替换、宏扩展以及执行条件编译。包含文件:#include<>;#include”” ;#include”绝对路径"文件名”。宏扩展:#define A B:每次遇到A就自动替换成B。如#define A “How are you?”#undefine 取消宏
4、 条件编译:#if #endif #elif #endif #ifdef #ifndef #line #pragma
第四,函数
自定义函数、内联函数:函数在编译时被替代,而不是像普通函数那样在运行时被调用、库函数。char*name(void)//字符串指针函数
函数调用?? 传值调用、引用调用、嵌套调用、递归调用;函数传参:按值、按引用、按指针传递参数
库函数:数学函数math.h 随机数函数stdlib.h 字符函数ctype.h 时间函数time.h 目录文件函数 dir.h 字符串处理函数 string.h 屏幕处理函数 conic.h 图形处理函数 graph.h
第五,对象和类
1、 类的三大特性:封装、继承、多态。
2、 构造函数:一个类只有一个构造函数,在声明该类的对象是自动对该对象进行初始化工作,无返回值。
析构函数:函数名字前带一个~,函数在对象撤销时自动被调用。如
Void main()
{
A a1;
A a2(11);
a1.display();
a2.display();
}
执行的顺序及输出的结果:
a 1在此隐含调用了构造函数----a2----a1.display()--------a2.dipaly()….a1的析构函数…….a2的析构函数
第六,数组、字符串、指针
C/C++的精华都集中在指针上,一切的调用、构造、析构、多态、重载、封装都可看成指针的内部指向。
第七,派生、继承、虚函数、友元
3、 虚函数:
在对现实的抽象中,有时我们发现在派生类中间一个成员函数需要与基类不同的实现,这时就需要虚函数的实现。将基类中的一个成员函数定义为虚函数后,在其派生类中,改该成员函数可有新的实现,这是多态性这一重要特征的体现。动态联编是一种运行时的绑定技术,殡仪程序在编译阶段并不能确切知道将要调用的函数,离岸边工作就是在程序运行时确定确切操作调用及相关代码的技术;而静态联编是在编译连接进行,在编译时就决定程序中的操作调用及相关代码的技术。
4、 友元:
友元是定义在类外部的函数,但他需要在类体内用关键字friend说明,它不是类的成员函数,但可以访问类中的私有成员。友元函数可以访问类的所有私有和保护成员:fiend 返回类型 函数名 (参数表);
友元类:定义一个类作为另一个类的友元,此时,这个类的所有成员函数都是另一个类的友元函数。
友元关系的继承:如果一个类的成员函数是另一个类的友元函数,这个成员函数是可以继承的,并且继承后它的友元函数关系不变。??
引用:程序负责用什么方法把参数传递给函数。建立一个目标的别名,当建立了一个引用之后,程序用另一个对象或者变量的名字来将它初始化。引用不占用空间,他只是目标的一个别名。格式:目标类型& 引用的名字=初始化变量
eg: int a; int& aint=a;其中aint 是对int类型的引用,初始化值为a,要求变量a在定义别名之前,必须已经被定义和说明。引用和目标指向同一个地址空间。引用建立后就是固定的某一个变量的别名。
第八,运算符重载
1、返回值类型 operator 运算符符号(参数说明)
如 Complex operator +(Complex& x);二元运算符+ 只有一个参数,隐含的参数是当前对象自己,它由系统传进来的指针this指出来。
从代码上看,将运算符作为成员函数和将其作为由原函数的差别不大,其差别就是在于生命的形式,以及指针this的使用。
2、参数,一元运算符没有参数,二元运算符只有一个右侧参数,因为该类的对象自己作为左侧参数。
3、无名临时对象
直接用类的构造函数来生成一个临时对象,而不对该对象进行命名。
return Complex(x.m_i+x.m_i,y.m_i+x.m_j);该句调用了Complex类的构造函数生成了一个无名的临时对象,增强了程序的可读性。
4 特殊重载符:new、delete、[]、()
new/delete:编写程序时无法确定数据所使用的空间大小。
void* operator new(size_t size)
{}//分配存储空间,返回空间的始地址,size_t类型被定义为包含可被分配的最大单片内存的类型,它是一个无符号整数类型。参数size将包含待分配对象需要的字节数。重载new的函数必须返回一个指向所分配内存的指针,或者再分配发生错误时返回零。
Delete函数接受一个指向待释放内存的指针,然后将由该指针所指向的内存释放给系统。
5、 数据转换
有基本类型转换和对象之间的转换:生成临时对象,用于函数返回
第九,模版和异常
函数体一样,但处理的参数类型和返回值类型不一样,所以是完全不同的函数。
模版的应用是基于编译器的,编译器在编译时自动将程序性中定义的数据类型变成相应的数据格式,这样做的好处是,可以不必重复定义相似的数据结构,但不好的地方是,这样做就无法将预处理和编译分离。