c 入门经典习题集.doc_第1页
c 入门经典习题集.doc_第2页
c 入门经典习题集.doc_第3页
c 入门经典习题集.doc_第4页
c 入门经典习题集.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

入门经典习题集 第一章:基本概念 ():c+程序至少包含一个main()函数():函数的可执行部分由包含在一对花括号中的语句组成():一对花括号定义了一个语句块():语句用分号结束():关键字是中有特殊含义的一组保留字,程序中的实体不能与语言中的任何关键字同名 第二章:基本数据类型和计算():数值和字符常量被称为字面量():可以把整数字面量定义为十进制,十六进制,或八进制():浮点字面量必须包含小数点和指数,或者两者都包含():的所有字面量和变量都有给定的类型():Char类型的变量可以存储单个字符,占用一个字节,char类型在默认的情况下是带符号的,也可以是不带符号的,这取决于编辑器,也可以使用,signed 和 unsigned char 类型的变量存储整数():类型wchat_t可以存储宽字符,占用两个字节,这也取决于编辑器():变量的名称和类型出现在声明语句中,以一个分号结束,声明一个变量,如果给该变量分配了空间内存,那么也就定义了该变量 ():变量的声明可以指定初始值,这是一种良好的编程习惯():可以用const保护基本数据类型的变量值,编辑器程序源代码文件中检查是否试图修改声明为const的变量 练习题:编写一个程序,计算圆的面积该程序应提示输入圆的半径,使用公式area = pi*radius*radius计算面积,在显示结果:使用第一题的解决方案,改进代码,使用户输入所需的位数,控制输出的精度(提示,使用setprecision()操纵程序):在生日那天,你得到了一个卷尺和一个可以确定角度的仪器,例如测量水平线和树高之间的夹角,如果你知道自己与树之间的距离d和眼睛平视量角器的高度h,就可以用下面的公式计算出树的高 h+d*tan(angle) 创建一个程序,从键盘上输入h, d ,angle输出树的高度第三章:处理基本数据类型():关键字typedef允许定义其他类型的同义词():关键字extern允许引用在另一个文件中定义的全局变量 练习题:编写一个程序,计算用户输入非整数的倒数,该程序应把计算的结果存储在double类型的变量中,再输出它:创建一个程序提示用户以十进制形式输入一个整数,在对其二进制表示的最后一位就反,也就是说,如果最后一位是,那么就把它改为,反之亦然,结果应显示为一个十进制数(老师提示:将这个数与1异或就可以了):编写一个程序,计算矩形搁板的一层可以容纳多少个正方形的盒子,且不会出现盒子悬垂的情况,使用double类型的变量表示搁板的长度和深度(单位是英尺),以及盒子一边的长度(单位是英寸),从键盘上读取这些值,需要声明并初始化一个常量,用于把英尺转换为英寸,在一个语句中,计算搁板的一层可以容纳多少个盒子,并把结果赋给一个long的变量:如果不运行下面的代码,能不能看出这些代码的输出结果? unsigned int k = 430u; unsigned int j = (k 4) & (0 3); std:coutj ; 5:编写一个程序,从键盘上读取四个字符,把它们放在一个四字节的整型变量中,把这个变量的值显示为一个十六进制分解变量的四个字节,以相反的顺序输出它们,先输出低位字节 第四章:选择和决策():可以使用比较运算符比较两个值,得到一个bool类型的值,它可以是true或false():可以把bool转换为整型true强制转换为,false转换为 0 ():可以把数值强制转换为bool类型强制转换为 false,非 0 转换为true ():if语句可以根据条件表达式的值执行一个语句或语句块,如果条件是true或非值就执行语句和语句块,反之就不执行():if- else语句给简单的if语句提供了另一个选项,如果条件为false或,就执行else语句():switch语句可以根据整数表达式的值,从一组固定的选项中选择():条件运算符根据一个表达式的值,选择两个值中的一个():使用goto语句,可以无条件的分支带有指定标签的语句 练习题:创建一个程序,提示用户输入一个到之间的整数,使用if语句判断该整数是否在设定的范围之内,如果是,在判断整数是否大于,小于或等于:编写一个程序,接受用户输入的一个字符,使用标准库函数判断它是否为一个元音字母,是否为小写字母,最后输出小写字母,再把字符编码输出为一个二进制的值:编写一个程序,只使用条件运算确定输入的整数是否是或小于,大于且小于,大于,且不超过,或者大于:编写一个程序,提示用户输入美圆,和美圆之间的一个钱款(允许使用小数)判断该钱款,包含多少个美分,美分,美分,和美分,并把该信息输出到屏幕上,输出的结果在语法上应该是有意义的(如,只需要一个角,输出就应该写为dime,而不1dimes) 第五章:循环():循环定义了一个作用域,在循环内定义的变量不能在循环内部访问,特别是for循环():在循环中执行break语句会立即退出循环():dowhile循环至少执行一次,只要条件为真就继续执行循环():在循环中执行continue语句会跳过当前迭代的剩余语句,如果循环条件允许就直接执行下次循环():一定要注意循环条件不能永远为真,否则将会用远循环,当然你可以用break强制退出循环 练习题:编写一个程序,输出到用户输入的数字之间的所有奇数的平方:创建一个程序,它使用while循环累加用户输入的随机个数的整数和,最后输出所有数字的总和,和浮点数类型的平均值:创建一个程序,它使用do-while循环计算用户在一行上输入的非空白字符的个数,在第一次遇到输入中的字符时,停止记数:创建一个程序,输出个随机大小写字母或数字组成的密码,允许输入重复的字符:创建一个程序,循环次,打印出到的数字,和到的数字:抽奖时要求在之间个不同的随机数,编写一个程序,每次运行时生成个抽奖选项:在之间选择个数(这个数有用户输入)然后自动输出这个数的所有排序(如,输入,则输出,) 第六章:数组和字符串():数组是同一类型的数值的命名集合,它们存储在连续的内存块中,每个值都可以通过一个或多个索引值来访问():一维数组需要一个索引值来引用其元素,二维数组需要两个索引值,n维数组需要n个索引值():数组的元素可以用在等号的左边和表达式中,其方法和相同类型的变量一样():char类型的一维数组可以用于存储非空字符串():可以让编辑器根据声明语句中初始化值的个数来决定数组中最左边的一维大小():可以把char类型的而维数组用做非空字符串的一维数组():String类型存储了一个字符串,它不需要中止字符,因为sting会跟踪字符串的长度():在string变量名后面的方括号中指定索引值,就可以访问string对象中的个个字符,索引值从开始():使用运算符可以把string对象与字符串字面量,字符或另一个string对象连接起来():String类型的对象可以用函数来搜索,修改,和提取字符串():字符串中的存储位置为size_t类型的整数值():声明string类型的数组与声明其他类型的数组所采用发方法是一样的():wstring类型的对象包含wchar_t类型的字符串练习题:创建一个数组,存储至多个学生的姓,创建另一个数组,存储每个学生的成绩(),使用一个循环,提示用户给这些输入姓名和成绩,计算平均成绩并显示,然后在一个表中显示所有学生的姓名和成绩:一位气象学家每天(周一到周五)都要记录大气的湿度三次(早晨,中午和晚上)编写一个小程序,让用户按年代顺序把这些记录输入到一个行列的float数组中,接着并计算每天的平均湿度和每天次的星期平均值:请看下面的一段程序#include #include #include #include using namespace std; int main() string text = Smith, where Jones had had had had, had had had. n Had had Had had the exminers appeoval.; string word = had; coutendlThe string is:endltextendl; int count = 0; for(int index=0;(index=text.find(word, index) != string:npos; index += (int)word.length(),count+); coutYou text contained countoccurrences of word . endl; return 0; 搜索子字符串had,找出其中所有had单词,且不考虑大小写(提示:复制原字符串):编写一个程序,从键盘上读取一任意长度的文本字符串,在提示输入要在该字符串中查找的单词,程序应查找出现在字符串中的所有单词,不考虑大小写,在用与单纯中字符个数相同的的星号来替换该单词,然后输出新字符串,注意必须是替换整个单词,例如:如果用户输入了字符串Our house is at your disposal.,要查找的单纯是our,则得到的字符串应该是*house is at your disposal.而不是*house is at y* disposal. :编写一个程序,提示输入两个字符串,在测试它们,看看其中一个字符茶是否为另一个字符串颠倒字母顺序而得到的 第七章:指针():指针是一个包含地址的变量():使用地址运算符可以获取变量的地址():要引用指针指向的值,应使用间接运算符它也被称为解除引用运算符():可以对存储在指针中的地址加减整数值,其结果就象指针引用一个数组一样,指针会变为整数值所指定的数组元素的个数():运算符new会分配自由存储区中的一块内存,返回所分配的内存地址,使它可以在程序中使用():运算符delete可以释放用运算符new分配的内存块():reinterpret_cast()运算符号可以把一种类型的指针转换为另一种类型练习题:编写一个程序声明并初始化一个数组,其中包含前个偶数,使用数组表示法输出该数组中的数字,每一行显示个数字,在使用数组表示法逆序输出这些数字:创建一个程序,在键盘上读取数组的大小,对这个数组进行动态分配内存,以存储浮点数值,使用指针表示法初始化数值的所有元素,是索引位置为n元素值是除以(n+1)的平方,使用指针表示法计算出元素的总和,对该总合除以,输出该结果的平方根,试着给该程序提供更大的数组大小,例如超过元素,结果有什么有趣的地方吗?:请看下面的程序#include #include #include #include #include using namespace std; int main() int height10; int count = 0; char reply = 0; do coutendl heightcount+; coutreply; while(count 10 & std:tolower(reply) = y); if(count = 10) coutendlMaximum height count reached.endl; double average = 0.0; for(int i=0;icount;i+) average += heighti; average /= count; coutendl Average height isaverageinches. /*avergaeinches*/ endl; int above_average = 0; for(int i=0;i average) above_average+; coutThere (above_average = 1?is:are) above_averageheight (above_average = 1? : s ) above average =0,且m=0,则如果m = 0,则ack(m, n) = n+1 如果n = 0,且m0, 则ack(m, n) = ack(m-1, 1) 如果m 0且n0, ack(m, n) = ack(m-1, ack(m, n-1)编写一个程序递归计算Ackerman函数,假定n为0到5之间的值,m为0到3之间的值,进行测试,这个函数的一个特性是,如果m和n有小幅度的增加,递归的次数(或深度)就会有非常大的增加,所以不要递归计算n8或m3的情形,实际上一台计算机没有足够的能力计算这种情形第十章:程序文件和预处理指令():程序中的每个实体都只能有一个定义():名称可以有内部链接属性,即该名称可以在一个转换单元中访问,名称也可以有外部链接属性,即名称可以在任何单元中访问,名称还可以没有链接属性,即名称只能在定义它的块中访问():头文件也可以包含源文件需要的定义和声明,头文件还可以包含模板和类型定义,枚举,常量,函数声明,内联函数定义,以及指定的命名空间,按照约定,头文件使用扩展名h():把函数定义和全局变量放在源文件中,源文件的扩展名是cpp():通过include指令可以把头文件的内容插入到.cpp文件中():Cpp文件是转换单元的基础,编辑器会处理转换单元,以生成对象文件():命名空间定义一个作用域在这个作用域内声明的所有名称都附加了命名空间的名称,不在显示命名空间作用域内声明的名称就在全局命名空间中():一个命名空间可以由几个独立的同名命名空间声明组成():在不同的命名空间中声明的相同名称是不同的():为了在命名空间的外部引用在命名空间中声明的标识符,需要指定命名空间的名称和标识符,两者之间用作用域解析运算符:分隔开():在某个命名空间声明的名称,在这个命名空间中使用时,可以不加限定符():预处理器执行预处理指令,在编译代码之前传送转换单元中的源代码,处理完所有的指令后,转换单元就只包含代码,没有预处理指令了():可以使用条件预处理指令,确保头文件的内容在一转换单元中没有重复():可以使用条件预处理指令,控制是否在程序中包含跟踪或其他诊断调试代码():assert()宏允许在执行过程中测试逻辑条件,如果逻辑条件为假,就输出一个消息,并终止程序练习题:有一个程序调用用了两个函数print_this(const string& s) 和 print_that(const string& s),这两个函数又调用了第三个函数print(const string& s),输出传送给它的字符串在个源文件中实现这个函数和main()函数,并提供个头文件,分别包含print_this(),print_that() 和 print的原型确保头文件只包含一次,main.cpp包含的include语句最少:修改上题的程序,使print()函数使用一个全局整数变量来计算它被调用的次数,在main()调用print_this() 和print_that()输出这个变量的值:在print.h头文件中,删除print()的已有原型,再创建两个命名空间print1和print2,每个命名空间都包含一个函数print(const string& s),这些函数都具有相同的函数签名,区分它们的唯一方式是命名空间的名称,在print.pp文件中实现这两个函数,输出命名空间的名称和字符串现在让print_this()调用在命名空间print1中声明的函数让print_that()调用在命名空间print2中声明的函数,运行程序,验证是否调用了正确的函数提示:从上面可以看出,在print_this()和print_that()中调用print()函数有三种不同的方式,即三种不同语法形式:修改main()例程,只有定义了预处理符号DO_THIS,才能调用print_this(),否则就调用print_that()修改代码,定义一个宏PRINT(),定义了DO_THIS后就让PRINT(abc)注意没有引号调用print_this(abc),否则就调用print_that(abc) 第十一章:创建自己的数据类型():结构类型是程序中的一个新数据类型():结构对象是带有成员的对象,这些成员在默认情况下可以公开访问,结构可以有数据成员和函数成员():可以使用对象名和句点分隔的成员来引用结构对象的成员,其中句点称为成员选择运算符():联合一种数据类型,它的对象可以使用同一个内存块在不同的时刻存储几种不同变量的值(也许类型也不同)():在声明联合对象时,只能为联合的第一个成员提供对应类型的初始值():结构的数据成员可以是任意类型,包括其他结构,但数据成员的类型不能与包含它的结构的类型相同():聚合是创建时可以用花括号中的初始值列表来初始化的实体():可以在自由存储区动态创建对象,但必须在指针中存储这些对象的地址():可以使用间接成员选择运算符访问对象的成员练习题:编写一个简单的货币转换程序,为此,需要在货币对象中关联两个实体:货币类型和把货币转换为美元的转换因子,设计一个结构来表示货币对象,编写一个程序,让用户从一个列表中选择转换的货币类型,在任意两种货币中转换,用户应输入值,并获得转换后的结果,如果输入一个负值,就退出程序:(较难)提供一种方式,让用在运行程序时添加新的货币类型:实现本章中更复杂的结构一节中描述的SharedData结构,扩展改结构(及相关的枚举类型),以及存储种类型的指针,测试一下,看看是能否存储变量的指针:编写一个函数,它接受ShareData对象数组,并以array_elementtype = value形式输出每个元素的值,例如:double = 37.2 float *= .在合适的main()函数中测试这个函数第十二章:类():类提供了定义自己的数据类型的一种方式,类可以反映某个问题所需要的对象类型():类可以包含数据成员和成员函数,类的成员函数总是可以自由访问该类中的数据成员():类的对象用构造函数来创建和初始化,在声明对象时会自动调用构造函数,构造函数可以重载,以提供初始化对象的不同方式():类的成员可以指定为public,此时它们可以由程序中的任何函数自由访问,另外类的成员还可以指定为private,此时它们只能被类的成员函数和友元函数访问():类的数据成员可以定义为static,无论类中创建了多少个对象,类中的静态数据成员都只有一个():可以在类对象的成员函数中访问类的静态数据成员,它们不是类对象的一部份,类对象的大小不包括静态数据成员的字节数():即使没有创建类的对象,类的静态函数成员也存在,并可以调用():类的每个非静态函数成员上都包含this指针,它指向调用该函数的当前对象():类的静态函数成员不包含this指针():类中声明为const的成员函数不能修改类对象的数据成员,除非数据成员声明为mutable():把类对象的引用用作函数调用的参数,可以避免产生把复杂对象传送给函数的系统开销():副本构造函数可以用类中已有的对象初始化同一个类中的新对象,如果没有定义类的构造函数,编辑器就会生成默认的副本构造函数练习题:创建一个简单的类Integer,它只有一个私有数据成员int,为这个类提供构造函数,并使用它们输出创建对象的消息,提供类的成员函数,获取和设置数据成员,并输出该值,编写一个测试程序,创建和操作至少个Integer对象,验证不能直接给数据成员赋值在测试程序中获取,设置和输出每个对象的数据成员值,以验证这些函数:修改上一题类Integer的构造函数,把数据成员初始化为初始化列表中的,并实现类的副本构造函数编写一个成员函数,比较当前对象和作为参数传送的Integer对象,如果当前对象小于参数,该函数就返回,如果他们相等函数就返回,如果当前对象大于参数,函数就返回,测试该函数的两个版本:第一个版本的参数按值传送,第二个版本的参数按引用传送,在调用该函数时,构造函数会输出什么结果?解释出现这种结果的原因类中的函数不能是重载函数,为什么?:为类Integer实现成员函数add(), subtract(), multiply(),对当前对象和Integer的参数值进行加,减和乘法运算,在类中用main()演示这些函数的操作,main()创建了几个Integer对象,它们分别包含值,在使用些对象计算的三次方,加的二次方,再加,再加的值,实现这些函数,使计算和结果的输出在一个语句中完成:修改题的解决方法,把compare()函数实现为Integer的一个友元 第十三章:类的操作():只能通过构造函数的初始化列表来初始化类的引用成员,引用不能用赋值语句来初始化():只要给函数按值传递对象,就会调用副本构造函数,其结果是传送给类的副本构造函数的参数必须是一个引用():如果在类的成员函数中动态分配内存,就中要执行析构函数来释放内存,实现副本构造函数和副本赋值运算符():把类的所有成员都声明为private,就可以限制对类的访问,此时,只有友元类可以创建该类类型的对象():嵌套类是把自己的定义放在另一个类定义的内部,嵌套类的名称在包含类的作用域内,为了在包含类的外部引用嵌套的类类型,类型名称必要用包含类的名称来限定():如果嵌套类的定义防在包含类的私有部分,嵌套类类型的对象就不能在包含类的外部创建练习题:编写一个类Sequence,在自由存储区中按照升序存储整数数值的递增序列,序列的长度和起始值在构造函数中提供,确保该序列至少有两个值,默认有个值,从开始(,),需要足够的内存空间来存储该序列,再用要求的值来填充内存提供show()函数列出该序列,释放分配给该序列的内存,(注意:确保释放所有的内存),创建并输出个随机长度(长度有限)的序列和一个默认的序列,来演示这类的操作:编写一个函数来比较这两个序列,如果Sequence对象有不同的长度,它们就是不同的,如果Sequence对象有相同的长度,但是对应的值不同,它们也是不同的,只有Sequence对象有相同的长度,且对应的值也相同,它们才是相同的,把这个函数编写为Sequence类的一个成员:重新编写比较函数,把它作为Sequence类的一个友元,如何改变参数和调用该函数的方式?最好使用什么技术a:标准库包含一个string类,但创建自己的string类可以弄明白设计和编写s类的许多问题,使用基本的char数据类型编写一个string类,看看它如何隐藏使用样式字符串的复杂性为MyString类创建一个头文件,把它放在自己的命名空间中,给这个类提供两个私有数据成员,整型长度和char*,char*指向对象所管理的字符串,为什么要把长度作为该类的一个数据成员存储 4b:创建一个类的实现文件(CPP),并提供构造函数,从下面的数据类型中构建MyString对象:一个字符串字面量,(例如:const char*类型),以便编写MyString s1(hello)一个重复多次的字符,默认的重复次数应是,使用这个构造函数的例子如MyStrings2(c,5) 一个整数值,这样MyString s3(10)就存储了字符串这些构造函数是显式的还是隐式的?构造函数在需要时应提供错误处理 4c:构造函数为存储字符串而分配内存,提供一个析构函数,在删除对象时正确的释放内存 4d:编写一个类的副本构造函数,以便从其他字符串中创建和初始化MyString对象 4e:给类添加一些成员函数:返回字符串的长度输出字符串索引从开始,找出某个字符或子字符串在字符串中的位置,如果没有找到则返回现在可以编写一个测试程序,以各种方式创建并处理mystring对象,保证所有的成员都工作正常 第十四章:运算符重载():在类中可以重载任何运算符,以提供针对该类的功能,但作用域解析符(:),条件运算符(?:),成员访问运算符(),解除类成员指针的引用运算符()和sizeof运算符不能重载():运算符函数可以定义为类的成员或全局运算符函数():如果一元运算符定义为类的成员函数,操作数就只类对象():如果一元运算符定义为全局运算符函数,操作数就是函数的参数():如果二元运算符定义为类的成员函数,左操作数就是类对象,右操作数就是函数的参数():如果二元运算符定义为全局运算函数,第一个参数指定左操作数,第二个参数指定为右操作数():要重载递增运算符,需要用两个函数分别提供运算符前缀和后缀形式,实现后缀运算符的函数有一个int类型的额外参数,它仅用于与前缀函数区分,递减运算符也是这样():实现运算符重载的函数可以用在函数的实现上,所有op=运算符都是这样():智能指针是一个操作类似于指针的对象,智能指针的一种形式是迭代给定类型的对象的复杂集合,采用的方式与一般指针类似,标准模板库广泛使用了这种形式 练习题:这些练习都建立在第章练习题的基础上,首先为MyString类提供一个重载的赋值运算符,确保它不是自我赋值,用下面的语句测试这个运算符是否工作正常,其中s1, s2,s3都是MyString的对象 s1 = s2; s1 = s1; s1 = s2 = s3;:重载加运算符,提供字符串连接功能,测试s1 = s2+s3;语句正确运行,提供运算符,这个运算符返回什么值?:重载,提供对字符串中单个字符的访问,于是,s14返回s1中的5第个字符,如果确保它可以于等号的两端:提供,!,运算符的重载,用于比较MyString对象,这些布尔运算符应返回什么类型?检查表达式if(s1 = s2)?:(教难)重载()运算符,从MyString对象返回一个子字符串,于是s1(2, 3)返回从s12开始的三个字符 第十五章:继承():类可以派生自一个或多个基类,此时派生类在其所有的基类中继承成员():单一继承就是从一个基类中派生新类,多重继承就是从两个或多个基类中派生新类():访问派生类的继承成员由两个因素控制:基类中成员的访问指定符和在派生类声明中基类的指定访问符():创建派生类对象一般需要按顺序(从一般的基类开始到最特殊的直接基类)调用所有直接和间接基类的构造函数,之后执行派生类的构造函数():派生类构造函数可以在初始化类表中显式调用直接基类的构造函数():在派生类中声明的成员名,如果与继承的成员名相同,就会遮盖继承的成员,为了访问被遮盖的成员,可以使用作用域解析运算符和类名来限定成员名():如果派生类有两个或多个直接基类,就会包含同一个类的两个或多个继承子对象,此时把重复的类声明为虚基类,就可以避免出现重复 练习题:定义一个基类,它包含两和私有成员,一个是string,存储动物的名称(例如Fido或Yogi),另一个是整数成员,weight,包含该动物的重量,该类还包含一个公共函数who(),它可以显示一个消息,给出对象的名称和重量,把用做公共基类,派生两个类lion和Aardvatk,再编写一个main()函数,创建lion和Aardvatk对象(Leo,磅,Algernon,磅),为派生类对象调用who()成员,说明who()成员在两个派生类中继承的来的:在类中,把who()函数的访问指定符改为peotected,但类中的其他内容不边,现在修改派生类,使原来的main()函数仍能工作:在上一题中,把基类成员who()的访问指定符改为public,但把who()函数实现为每个派生类的成员,且在输出消息中显示派生类名,现在修改main()函数,为每个派生类对象调用who()的基类版本和派生类版本:定义一个类Person,它包含数据成员age, name和gender,从Person中派生一个类Employee,在新类中添加一个数据成员,存储个人的number,再从Employee中派生一个类Executive,每个派生类都应定义一个函数,来显示相关的信息,(名称和类型,如Fred Smith is an Employee)编写一个main()函数,生成两个数组,一个数组包含个Executive对象,另一个数组包含个一般的Employee对象,然后显示它们的信息,另外,调用Employee类继承的成员函数,显示的信息 第十六章:虚函数和多态性():多态性是指通过指针或引用调用函数,而且调用是动态解析的,即在程序执行时确定调用哪个函数():基类中的函数可以声明为vitual,在派生于该基类的所有类中,这会迫使该函数总是虚函数,在通过指针或引用调用函数时,函数调用就是动态解析的,函数调用的对象类型,将确定所使用的函数版本():使用对象或直接成员选择运算符来调用虚函数,该函数调用就是动态解析的,即在编译期间进行解析():如果基类包含虚函数,就应把基类的虚函数声明为vitual,这会为确保动态创建的派生类对象选择正确的函数():纯虚函数没有定义,基类的虚函数在函数声明的最后加上,就变成了纯虚函数():包含一个或多个纯虚函数的类被称为抽象类,这种类不能创建对象,在该类的任何派生类中,必须定义所继承的所有纯虚函数,否则该派生类也是抽象类,也不能创建类的对象():虚函数的默认参数值是静态赋予的,如果虚函数的的基类版本有默认的参数值,在派生类中指定的默认参数值就会被忽略,因为虚函数调用是动态解析的():可以声明类成员的指针,它们可以是数据成员的指针,也可以是函数成员的指针,这类指针需要与对象,对象的引用或指针一起使用,来引用成员指针定义的对象的类成员练习题:在章的练习中,定义了一个基类Animal,它包含两个私有数据成员,一个是string成员,存储动物的名称(Fido),一个是整数成员weight,存储了动物的重量(单位是磅),该基类还包含一个公共的虚拟函数who()和一个纯虚函数sou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论