《第一部分绪论复习》由会员分享,可在线阅读,更多相关《第一部分绪论复习(37页珍藏版)》请在金锄头文库上搜索。
1、第一章 绪论复习面向对象三大特性封装性属性和行为封装成一个实体数据和对数据施加的操作封装在实体内部隐藏,公开继承性代码共享,复用提高软件维护性单继承、多继承多态性单一接口,多种实现重载、虚函数输入、输出cincin析取运算符变量常量coutcout格式控制域宽,setw(n);对齐方式,setiosflags(ios:left);精度,setprecision(n);上周上机作业:用for,cout,setw输出以下图形#include #include void main()int line_number;line_number=4;int i,j;for(i=1;i=line_number
2、;i+)coutsetw(line_number-i+1)=1;j-)cout*;coutendl;1234567行号 *1 *2 *3*4域宽:行数-行号+1*个数-1:(行数-1)*2域宽4321*个数-10246line_number=10;line_number=20;setprecision#include #include void main()double i=1.23456789;int j;for(j=1;j15;j+)coutsetprecision(j)i2000年),屏幕输出该年),屏幕输出该年的年历。年的年历。(已知:已知:2000年年1月月1日是星期六日是星期六)1
3、、输入年份y2、计算y年1月1日是星期几?闰年:366天366 mod 7=2平年365天365 mod 7=12000年1月1日 到 y年1月1日 years=y-2000闰年:leapyears=1+(years-1)/4平年:commonyears=years-leapyears(6+leapyears*2+commonyears*1) mod 7输入任意一个年份(输入任意一个年份(2000年),屏幕输出该年),屏幕输出该年的年历。年的年历。(已知:已知:2000年年1月月1日是星期六日是星期六)3、判断y年是否是闰年?闰年:(y-2000) % 4=0平年:(y-2000) % 4!=
4、04、打印年历类 复习类从访问属性上分:私有成员公有成员保护成员从种类上分:数据成员成员函数类定义类声明和类成员函数的定义相分离一般把类的声明放在头文件(.h)把成员函数的定义放在源文件(.cpp)void printTwoMonths(int& firstday,int days1,int days2)LeftFlag:打印标记i:左月当前输出日期j:右月当前输出日期LeftFlag=true idays1LeftFlag=false类复习类的最特殊的两个成员函数?构造函数有什么特点?函数名与类同名如果没有定义任何构造函数,系统会给一个缺省的无参构造函数只要定义了一个构造函数,系统就不会提供
5、缺省的无参构造函数构造函数是由系统自动调用,不允许显示调用构造函数可以重载类复习拷贝构造函数如果一个类未定义拷贝构造函数通常什么情况下要显示定义拷贝构造函数拷贝构造函数有几个参数通常这个参数是什么类型类复习析构函数的特点函数名参数返回值能否重载功能通常是类复习构造函数的初始化列表初始化列表Class XX(int f,int j,int k);const int m_f;int & m_j;int m_k;X:X(int f,int j,int k):m_f(f),m_i(i)类复习静态成员关键字static两种身份静态数据成员和静态成员函数普通(非静态)数据成员属于类 or 对象 静态数据成
6、员属于类 or 对象对象对象对象类类类类复习静态成员函数可以访问类的静态成员函数类的静态数据成员不可以访问类的非静态成员函数类的非静态数据成员为什么?因为 没有 this指针类复习this指针每一个类的成员函数,都包含一个隐含的参数this指针指向调用该成员函数的对象的首地址return *this; /表示this-类的某个数据成员继承 复习继承代码复用在现有类的基础上,派生出新类现有类基类超类父类新类派生类子类继承 复习继承种类私有继承私有化公有继承不变保护继承保护化无论是哪种继承方式,派生类对基类的私有成员访问方式:无法访问继承 复习当一个类,既有基类,又有成员对象,实例化这个类的一个对
7、象时:先调用基类的构造函数;然后调用成员对象类的构造函数;最后实例化自己;多继承什么是多继承?一个类派生自两个或两个以上的基类一个有多个基类的派生类,它含有多个成员对象。实例化这个派生类对象,构造顺序?先基类多个基类,按定义先后顺序依次构造再成员对象多个成员对象,按定义先后顺序依次构造后派生类自己析构顺序?与构造相反虚拟继承关键字virtual出现的原因避免出现二义性当派生类从多个直接基类派生,而这些直接基类又从同一个间接基类派生,则在访问间接基类的成员时,会产生二义性。ABACDBACD基类与派生类基类对象与派生类对象之间存在赋值相容性基类对象能够赋值给派生类对象(派生类对象=基类对象)派生
8、类对象能够赋值给基类对象(基类对象=派生类对象)把派生类对象的地址赋值给基类指针用派生类对象初始化基类对象的引用第五章 多态性多态性静态多态性函数重载 运算符重载动态多态性继承虚函数虚函数关键字virtual在具有继承关系的类的层次体系中,虚函数的特性:可继承基类的函数定义为虚函数,派生类的该函数自动具有虚特性;虚函数函数原型 完全一致只是函数名相同虚函数虚函数(fa)基类指针(pr),指向不同的派生类对象Pr-fa();调用的是哪个类的fa函数非虚函数(fb)基类指针(pr),指向不同的派生类对象Pr-fb();调用的是哪个类的fb函数运算符重载Why 为什么要重载运算符?运算符可以被预定义
9、类型直接使用自定义类型要使用运算符,必须(有例外)先重载运算符=&.-How 怎么重载运算符?成员函数非成员函数友元函数普通函数运算符重载成员函数形式重载运算符参数表参数个数运算符操作数个数自己是默认的第一个操作数非成员函数形式重载运算符参数表参数个数运算符操作数个数运算符重载+,-的重载怎么区分前缀和后缀后缀,多一个int参数注意参数-引用类型=赋值运算符的重载什么情况下需要重载它?怎么重载?重载方式五步曲下标运算符运算符重载下标运算符重载方式模板复习什么是模板你学习了几种模板用模板用什么好处模板有固定的和不固定的部分什么是模板不固定的部分模板参数有几种函数模板的模板参数可能出现在什么地方函
10、数模板的模板参数可能出现在什么地方当某种数据类型不适用于模板,怎么办STL复习什么是STL?STL主要包含几个部分的内容?容器,有几大类型?顺序容器关联式容器容器适配器你记得些什么容器?vectorliststackqueuemap multimapset multisetSTL复习容器的begin()函数指向?容器的end()函数指向?容器的begin()函数和end()函数的返回类型是?容器迭代器是什么?一种更智能、更安全的指针指向容器元素类型容器迭代器怎么定义?某容器:iterator;multimap dict;multimap:iterator it;STL复习算法是用什么技术实现?泛型算法,函数模板头文件#include 记得哪些泛型算法?findsortcountsearchmerge