复习提纲一类的主体部分类的主体部分即类的成员部分,主要记载该类中的一些相关信息与相关操作,在类中类的成员可分为类的数据成员与类的成员函数。由于类的封装性,并不是所有的函数都能访问类中的成员,因此,我们对类的成员的访问属性进行了规定。复习提纲一类的成员按照它们的访问属性可以分为三大类:公有成员(public):可以被任何普通函数和任何类的成员函数访问,也可以被类的对象直接访问私有成员(private):可以被类自身的成员函数和友元访问,但不能被包括派生类在内的其他任何类和任何普通函数访问保护成员(protected):可以被类自身的成员函数和友元访问外,还可以被派生类的成员函数访问,但不能被其他类的成员函数和任何非友元的普通函数访问复习提纲一公有继承(public)和派生基类中公有成员和受保护成员被继承后可见性不变public方式继承成员存取权限等级的变化成员M基类中的存取权限成员M在public继承后的派生类中的存取权限publicpublicprotectedprotectedprivate隐藏复习提纲一私有继承(private)和派生基类中公有成员和受保护成员被继承后都是私有的private方式继承成员存取权限等级的变化成员M基类中的存取权限成员M在private继承后的派生类的存取权限publicprivateprotectedprivateprivate隐藏复习提纲一受保护继承(protected)和派生基类中公有成员和受保护成员被继承后都是受保护的成员M基类中的存取权限成员M在protected继承后的派生类的存取权限publicprotectedprotectedprivateprivate隐藏复习提纲一指出下列程序的错误并说明为什么。1、#includeiostream.hclassstudent{charname[10];intage;intsemeshours;//总学时floatgpa;//平均学分};复习提纲一voidmain(){studentp1,p2,p3;p1.age=19;p2.gpa=85.0;//……}复习提纲一2、#includeiostream.hclassstudent{intsno;intage;voidoutstu();voidsetsno(intd);};复习提纲一voidoutstu(){coutsno““ageendl;}voidsetsno(intd){sno=d;}voidsetsno(intd){sno=d;}复习提纲一voidmain(){students1;s1.setsno(10001);s1.setage(20);s1.outstu();}复习提纲一3、#includeiostream.hclassA{intm;public:voidfun(){cout“a.fun”endl;}};classB:publicA{public:voidfun1(){cout“b.fun”endl;}};复习提纲一voidmain(){Aa1;Bb1;a1.m=10;b1.m=20;}复习提纲一类中存在一些特殊的成员函数--构造函数和析构函数*重点掌握构造函数、析构函数的功能及调用情况构造函数用于创建并初始化对象,而析构函数则用于释放并回收对象所占内存单元的空间。(析构函数名跟构造函数名一样,与类名一样)它们都是自动被系统调用的。复习提纲一*拷贝构造函数当用一个对象去构造另一个对象或者说用另一个对象值初始化一个新构造的对象时需要调用拷贝构造函数。例如下面的程序代码在执行时就调用了拷贝构造函数classA{//……};Aa1,a2;a2=a1;Ab1(b2);复习提纲一分析以下程序的运行结果。#includeiostream.hclasspoint{private:intx,y;//私有成员定义public:point(inti,intj){x=i;y=j;}复习提纲一intgetx()//取x轴坐标分量{returnx;}intgety()//取y轴坐标分量{returny;}point(constpoint&p)//自定义拷贝构造函数{x=2*p.x;y=2*p.y;}};复习提纲一voidmain(){pointp1(30,40);pointp2(p1);p1.getx();p2.getx();p1.gety();p2.gety();}复习提纲一继承关系中构造函数之间的关系派生类不继承基类的构造函数派生类和基类的构造函数之间是一种自动调用的关系创建派生类对象时,派生类构造函数要调用基类的构造函数对基类的数据成员进行初始化–先执行基类构造函数,然后执行派生类构造函数体–基类构造函数需要参数时需要显式调用,格式:派生类名::派生类名(参数表):基类(参数表)–基类构造函数不需要参数时(有默认构造函数),隐式调用复习提纲一继承关系中析构函数之间的关系派生类不继承基类的析构函数派生类和基类的析构函数之间是一种自动调用的关系派生类的析构函数也需要调用基类的析构函数做一些和基类相关的清理工作销毁派生类对象时–先执行派生类析构函数,然后执行基类析构函数体复习提纲一类的继承类的继承大致可分为单一继承和多重继承两大类重点复习类的多重继承。在多重继承中可能会有大量的二义性,多个基类中可能包含同名变量或函数,而且出现基类中的一个数据被拷贝多份现象,既占用内存单元,在访问这些成员时也容易出错。复习提纲一多重继承B(intdata)A(intdata)C(intdata)Dvoidshow(){coutdata;}复习提纲一虚拟继承虚基类的简单实例PeopleName,sex,ageTeacherTitle//职称StudentscoreGraduateWage//工资Show()//显示各成员信息复习提纲一虚拟继承classpeople{public:people(char*pname,chars,inta){strcpy(name,pname);sex=s;age=a;}protected:charname[20],sex;intage;};复习提纲一虚拟继承classteacher:virtualpublicpeople{public:teacher(char*str,chars,inta,char*ptitle):people(str,s,a){strcpy(title,ptitle);}protected:chartitle[20];};复习提纲一虚拟继承classstudent:virtualpublicpeople{public:student(char*str,chars,inta,floatsco):people(str,s,a),score(sco){}protected:floatscore;};复习提纲一虚拟继承classgraduate:publicteacher,publicstudent{//……};voidmain(){//……}复习提纲一包含虚基类的派生类的构造函数的调用整个继承结构中,直接或者间接继承虚基类的所有派生类中都必须在构造函数的成员初始化列表中列出对虚基类的初始化(除虚基类的默认构造方法外)虚基类的构造函数只会调用一次,即被最底层的派生类的构造函数调用,而最底派生类的其他基类对虚基类的构造函数的调用被自动忽略.若派生类的直接基类中既有虚基类又有非虚基类,则先调用虚基类构造函数,再调用非虚基类的构造函数。复习提纲一1、建立普通的基类buliding,用类存储一座楼房的层数、房间数以及它的总平方数。建立派生类house继承buliding,并存储卧室与浴室的数量,另外建立派生类office继承buliding,并存储灭火器与电话的数量。复习提纲一2、按照所示的类层次图编写程序,定义属于类score的对象c1及类teacher的对象t1,分别输入各数据成员的值后再显示出这些数据。Personname,idTeacherdegree,payStudaddr,telStudentage,snoScoremath,eng