您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C++面向对象程序设计复习提纲
第一章C++的初步知识第二章类和对象第三章关于类和对象的进一步讨论第四章运算符重载第五章继承与派生第六章多态性与虚函数第七章输入输出流第一章C++的初步知识•1.1从C到C++•1.2C++语言的词法和词法规则•1.3最简单的C++程序•1.4C++对C的扩充√•1.5C++程序的编写和实现1.4C++对C的扩充•C++既可用于面向过程的程序设计,也可用于面向对象程序设计。•C++继承了C语言提供的绝大部分功能和语法规定,并在此基础上作了扩充。•1.4.1C++的输入和输出•1.4.2用const定义常变量•1.4.3函数原型声明•1.4.4函数的重载•1.4.5函数模板•1.4.6有默认参数的函数•1.4.7变量的引用•1.4.8内置函数•1.4.9作用域运算符•1.4.10字符串变量•1.4.11动态分配/回收内存运算符作业•5,6,7,10,11,•13(改成用模板和变量引用设计)第2章类和对象•2.1面向对象程序设计方法概述•2.2类的声明和对象的定义√•2.3类的成员函数√•2.4对象成员的引用(调用)√•2.5类和对象的简单应用•2.6类的封闭性和信息隐蔽类定义格式:class类名{private:私有成员声明public:公有成员声明protected:保护成员声明};•class是保留字,声明类类型类名:按标识符取名。•private、public、protected也是保留字,是成员访问限定符,其后必须跟冒号。在类声明的}后如不直接定义对象就必须跟分号。•private:只能被本类中的成员函数访问,类外(除友元外)不能访问。•public:公有成员可以被本类的成员函数访问,也能在类的作用域范围内的其他函数访问。•protected:受保护成员可由本类的成员函数访问,也能由派生类的成员函数访问。在定义类时,这三类成员不分前后顺序,也可以重复出现。一般推荐最多出现一次。例2.3类成员的调用#includeiostreamusingnamespacestd;classTime{private:inthour;intminute;intsec;public:voidset_time();voidshow_time();};•intmain()•{•Timet1;•t1.set_time();•t1.show_time();•Timet2;•t2.set_time();•t2.show_time();•return0;•}voidTime::set_time(){cinhour;cinminute;cinsec;}voidTime::show_time(){couthour:minute:secendl;}多文件系统•一般在面向对象程序开发时:•将类的声明(包括成员函数的声明)放在指定的头文件(*.h)中;•把类成员函数的定义放在源文件(*.cpp)中;•在应用程序中只要把有关的头文件包含进来即可。作业P68习题5,6第3章关于类和对象的进一步讨论本章将对类和对象进行进一步的讨论。•3.1构造函数√•3.2析构函数√•3.3调用构造函数和析构函数的顺序√•3.4对象数组•3.5对象指针•3.6共用数据的保护(难点)•3.7对象的动态建立和释放•3.8对象的赋值和复制•3.9静态成员•3.10友元•3.11类模板3.1构造函数•3.1.1对象的初始化•3.1.2构造函数的作用•3.1.3带参数的构造函数•3.1.4用参数初始化表初始化数据成员•3.1.5构造函数的重载•3.1.6使用默认参数的构造函数确定对象的初始状态3.1.2构造函数的作用构造函数的作用:•用于为对象分配空间和进行初始化。构造函数的特点:•(1)构造函数的名字与它的类名必须相同;•(2)它没有类型,不返回值,为public类型;•(3)它可以带参数,也可以不带参数;•(4)不需要写调用语句,在系统建立对象时由系统自觉调用执行。•(5)如果用户没有定义构造函数,C++系统会自动生成一个空的构造函数。#includeiostreamusingnamespacestd;classBox{public:Box();//不带形参的构造函数为系统默认函数Box(inth,intw,intlen):height(h),width(w),length(len){}intvolume();private:intheight;intwidth;intlength;};这是什么?•构造函数也可以重载。•一个类可以有多个同名构造函数,函数参数的个数、参数的类型各不相同•定义对象是只执行一个构造函数#includeiostreamusingnamespacestd;classBox{public:Box(intw=10,inth=10,intlen=10);intvolume();private:intheight;intwidth;intlength;};例3.4:将例3.3中的构造函数改用带默认值的参数,长、宽、高的默认值都是10。如果在类外定义构造函数,应该在声明构造函数时指定默认参数值,在定义函数时可以不再指定默认参数值。3.2析构函数•作用:与构造函数相反,当对象的生命周期结束时,系统自动调用析构函数,收回对象占用的内存空间。•析构函数的特征①析构函数名以~符号开始后跟类名②析构函数没有数据类型、返回值、形参。由于没有形参所以析构函数不能重载。③如果程序员没有定义析构函数,C++编译系统会自动生成一个析构函数。3.3调用构造函数和析构函数的顺序当定义多个对象时:先构造的后析构,后构造的先析构。对象1的构造函数对象2的构造函数对象1的析构函数对象2的析构函数作业P116习题2,4,7.(1)(2),12第四章运算符重载4.1什么是运算符重载4.2运算符重载的方法√4.3重载运算符的规则√4.4运算符重载函数作为类成员函数和友元函数√4.5重载双目运算符4.6重载单目运算符4.7重载流插入运算符和流提取运算符4.2运算符重载的方法•方法:定义一个重载运算符函数,在需要时系统自动调用该函数,完成相应的运算。•实质:函数的重载。•运算符重载函数的格式:函数类型operator运算符(形参表){重载处理}数据类型:是重载函数值的数据类型。operator是保留字4.3重载运算符的规则(1)C++只允许重载已有运算符。(2)不能重载的运算符有五个。(3)重载不改变操作数的个数。(4)重载不改变运算符的优先级。(5)运算符重载函数不能带默认值参数。(6)运算符重载函数参数至少有一个自定义类型,可以是类对象或类对象引用。(7)运算符重载函数可以是类成员函数也可以是类的友元函数,还可以是普通函数。例4.2classComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}//重载运算符+Complexoperator+(Complex&c2);//类的成员函数重载运算符voiddisplay();private:doublereal;doubleimag;};test14#includeiostream.hclassComplex{public:Complex(){real=0;imag=0;}Complex(doubler){real=r;imag=0;}Complex(doubler,doublei){real=r;imag=i;}friendComplexoperator+(Complex&c1,Complex&c2);//类的友元函数重载运算符voiddisplay();private:doublereal;doubleimag;};test14例4.3作业P149习题2,4第五章继承与派生•面向对象程序设计有四个主要特点:抽象(二、三章);封装(二、三章);继承(五章);多态性(六章)。•5.1继承与派生的概念√•5.2派生类的声明方式√•5.3派生类的构成√•5.4派生类成员的访问属性•5.5派生类的构造函数和析构函数•5.6多重继承继承与派生的关系类A是已存在的类,在A的基础上建立一个新类B:•类A称为基类或父类,类B称作派生类或子类。•子类从父类获得其已有的特性,这种现象称作类的继承。•父类产生子类,称作类的派生。5.2派生类的声明方式•派生类的声明格式:class派生类名:[继承方式]基类名{派生类新增成员声明};•继承方式包括:public、private(系统默认)、protected。•举例:已经声明一个基类student,在它基础上通过单继承建立一个增加了“年龄”的派生类student1。5.3派生类的构成•派生类中的成员包括从基类继承过来的成员和自己增加的成员。构成部分派生类Student1成员类型接收成员数据成员num,name,sex基类成员成员函数display()//可以重载新增成员数据成员age派生类成员成员函数display_1()构造函数需重新定义5.5.1简单的派生类的构造函数•何为简单派生类?只有一个基类,只有一级派生;派生类数据成员中不包含基类的对象(子对象)。•构造函数格式:派生类名::派生类名(基类所需的形参,本类成员所需的形参):基类名(基类参数表){本类成员初始化赋值语句;};说明:基类所需的形参,基类参数表一一对应例5.5简单派生类的构造函数#includeiostream#includestringusingnamespacestd;classStudent//声明基类{public://公用部分Student(intn,stringnam,chars)//基类构造函数{num=n;name=nam;sex=s;}~Student(){}//基类析构函数protected://保护部分intnum;stringname;charsex;};test51classStudent1:publicStudent//声明公用派生类{public:Student1(intn,stringnam,chars,inta,charad[]):Student(n,nam,s)//派生类构造函数{age=a;//只对派生类新增的数据成员初始化addr=ad;}voidshow();private://派生类的私有部分intage;stringaddr;};执行构造函数的顺序是(析构函数相反):①派生类构造函数先调用基类构造函数;②再执行派生类构造函数本身。即先初始化num,name,sex,然后再初始化age和addr5.6多重继承5.6.1声明多重继承的方法5.6.2多重继承派生类的构造函数5.6.3多重继承引起的二义性问题5.6.4虚基类为何要用多重继承?如:定义一个沙发床类5.6.3多重继承引起的二义性问题多重继承最常见的问题是二义性问题。二义性问题分类:•在多重继承时,基类与派生类之间,或基类之间出现同名成员时,将出现访问时的二义性(不确定性)——采用同名隐藏规则(5.6.3)来解决。•当派生类从多个基类派生,而这些基类又从同一个基类派生,则在访问此共同基类中的成员时,将产生二义性——采用虚基类(5.6.4)来解决。同名隐藏规则•当派生类与基类或基类之间有相同成员时,•访问派生类中的同名成员方法:派生类对象.同名成员名•访问基类中被覆盖的同名成员方法:派生类对象.基类名::同名成员名1.虚基类的作用•作用派生类在继承间接共同基类时只保留一份成员,从而解决多层继承时可能发生的对同一基类继承多次而产生的二义性问题。•声明class派生类名:virtual继承方式基类名,如:classA:virtualpublicN•注意在第一级继承时就要将共同基类设计为虚基类类的继承举例1:classN{public:inta;Voiddisplay(){cout“N::a=“a;}};图5.185.6.4虚基类作业P193习题4,5,7①,8①第六章多态性与虚函数6.1多
本文标题:C++面向对象程序设计复习提纲
链接地址:https://www.777doc.com/doc-2756523 .html