C++典型概念与习题.docx_第1页
C++典型概念与习题.docx_第2页
C++典型概念与习题.docx_第3页
C++典型概念与习题.docx_第4页
C++典型概念与习题.docx_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

C+典型概念与习题一、基本概念1. 在类体内定义的成员函数默认为内联函数,在类体外定义的成员函数只有用inline修饰的才可能成为内联函数。类体外定义类的成员函数的形式。2. 当同名的全局变量和局部变量相冲突时,可以用作用域运算符来访问全局变量3. 类的静态成员是该类的所有对象所共享的成员,类可以没有静态成员。4. 如果没有显式定义构造函数,系统将隐式定义缺省的构造函数及拷贝构造函数;5. 如果只显式定义了拷贝构造函数,系统仍然不隐式定义缺省的构造函数;6. 如果显式定义了构造函数但没有显式定义拷贝构造函数,系统将隐式定义拷贝构造函数。7. 通过指针访问对象成员的形式8. 逗号运算符的使用(优先级)9. 正确理解while、dowhile循环10. 正确理解break,continue语句的功能11. 正确理解类成员的访问特性12. 理解运算符重载的概念及特点(哪些特性能改变与不能改变)13. 复杂逻辑表达式的取值(结果是什么?与关系运算、赋值运算一起的混合运算、逻辑表达式优化)14. 正确理解数组名作为函数的参数的意义与形式15. 正确理解友元函数与类的成员函数的区别16. 类和对象的概念与关系17. 理解类的构造函数和析构函数是否能重载二、阅读理解(分析程序输出)1.程序 #includeusing namespace std;void fun(int a4, int n) for(int i=0; in; i+) for(int j=0; j4; j+) if(aij0) aij=-1; else if (aij5) aij*=2; else if(aij10) aij-=5; else aij=10;int main()int d34=-5,-4,-3,-2,-1,0,1,2,3,4,5,6, s1=0, s2=0; fun(d,3);for(int i=0; i3; i+) for(int j=0; j4; j+) s1+=dij; s2*=dij; couts1=s1endl; couts2=s2endl; return 0;2.程序 #includeusing namespace std;class Aint a,b;public:A() a=0; b=0; void set(int t) a=t; b=2*t; friend void show(A *);void show(A *t) couta+t-b)endl; int main() int t=1;A a15, *pa=a1;for(int i=1;iset(t+=1); pa=a1; while(pa=&a14) show(pa); pa+; return 0;3.程序 #includeusing namespace std;void fun(int *p,int n) if(n=0) *p=0; else if(n=1) *p=1; else *p=*(p-1)+*(p-2);int main()int i=0,a10;while(i10)fun(a+i,i);i+;i=0; while(i10) coutai+endl; return 0;4.程序 #includeusing namespace std;class Aprotected: int a;public:A(int t=5) a=t; couta=aendl; int geta() return a; ;class B: public AA t; int b;public:B(int m):t(m) b=2*m; coutB()endl; void print () cout(a+b+t.geta()endl; ;int main()B b1(2);b1.print();return 0;5程序#include#include using namespace std;void str(char *st1, char *st2, int n=-1) char *p1=st1, *p2=st2;while(*p1+); p1-=2;if(n=st2) *p1+=*p2-; *p2=0;int main()char s140=abcde, s2=12345, s3=ABCDE;str(s1,s2);couts1endl;str(s1,s3,3);couts1endl; return 0; 6. 程序 #includeusing namespace std;class A public:int a;A(int t=5) a=t; void print() coutaendl; ;class B:virtual public A public: int b;B(int c):A(c) b= 2*c; void print( ) cout b+2*aendl; ;class C:virtual public A public: int c;C(int d):A(d) c= 3*d; void print( ) cout 2*a+cendl; ;class D:public B,public Cpublic:D(int d):B(d+2),C(d+1) void print( ) cout(a+b+c)endl; ;int main()D d1(2);d1.print(); d1.A:print(); d1.B:print(); d1.C:print(); return 0; 7.程序 #includeusing namespace std;void f(int *t1,int &t2,int t3) (*t1)+; t2+=2; t3+=3; int main(void) int a23=0, *p, i=0, s1=0, s2=0; p=&a00; for(i=0; i&a00) *p+=*(p-1); p+; f(p-2, *(p-3), *(p-4); for(p=a0,i=0; i3; i+) s1+=*p+; for(p=a1,i=0; i3; i+) s2+=*p+; couts1=s1endl; couts2=s2endl; return 0; 8. 程序 #includeusing namespace std;void f (int n,int &k, int *m) static int a=0;int b=0; if (n=1|n=2) k=1; *m=1; else f(n-1, a, &b);k+; (*m)+=2;couta+bn; int main(void) int x=0,y=0;f(4,x, &y);coutx=xty=yn; return 0; 9. 程序 #includeusing namespace std;class Base protected:int a;public:Base(int t=0) a=t; virtual int fun1()= 0; int fun2( ) return 0; ;class Add:public Base int d;public: Add(int t1, int t2):Base(t1),d(t2) int fun1( ) return a+d; int fun2( ) return 2*(a+d); ;class Multi:public Base int d;public:Multi(int t1, int t2):Base(t1),d(t2) int fun1( ) return a*d; int fun2( ) return (2*a*d); ;void fun(Base *p) coutR1 = fun1()endl;coutR2 = fun2()999)的个位上的数字自增(自增后大于9则取值为9),十位上的数字自减(自减后小于0则取值为0),百位上的数字取值个位和十位原有数字中较大值,其余各位上数字不变。【程序】 #include using namespace std;int fun(int n)int i1, i2, i3;i1=n%10;/个位数字i2=(n%100)/10 ; /十位数字i3=(n%1000)/100; /百位数字i3=i1i2?i1:i2;i1=(i1+1)=9?9:(i1+1);i2=(i2-1)=0?0:(i2-1);return i3*100+i2*10+i1;int main( )int a;cout999):; cina; coutfun(a)endl; return 0;2.【题目】以下程序的功能是输出对象的成员字符串,请完善填空。【程序】#include#includeusing namespace std;class STR char *s;public:STR(char *p) int n=strlen(p);s=new charn; strcpy(s,p); char getchar(int i) return si; / 取第字符串s中第i个字符(i=0,1,2,) STR()delete s; ;int main( )char st40, c; cout请输入一个字符串:; cin.getline(st,40);STR test(st) ; / 生成对象testint i=0;do c=test.getchar(i+); /取test成员字符串中第i个字符(i=0,1,2,)coutc; while(istrlen(st); coutendl; return 0;四、面向对象编程1. 【题目】定义一个类Array,求一维数组(数组大小为N,1N100)中值为奇数的元素之和。具体要求如下:(1)私有数据成员l int aN;/ 存放一维数组l int len;/ 一维数组中实际元素的个数l int s;/ 一维数组中值为奇数的元素之和(2)公有成员函数l Array(int *p,int n);/ 构造函数,用p所指数组初始化数据成员a和lenl void f();/ 根据题意求数据成员s的值l void print();/ 输出数据成员a和s(3)在主函数中用数据1,2,3,4,5,6,7,8测试所定义的类Array。输出:1 2 3 4 5 6 7 8sum=16【参考程序】#include#define N 100using namespace std;class Arrayint aN;int len;int s;public:Array(int *p,int n)s=0;len=n;for(int i=0;ilen;i+)ai=pi;void f()for(int i=0;ilen;i+)if(ai%2)s+=ai;void print()for(int i=0;ilen;i+)coutait;coutn;coutsum=sendl;int main()int t8=1,2,3,4,5,6,7,8;Array test(t,8);test.f();test.print();return 0;2. 【题目】定义一个类array,求一维数组中偶数位置的元素(第2个元素,第4个元素,)之和。具体要求如下:(1)私有数据成员l int *a;/ 存放一维数组l int len;/ 一维数组中元素的个数l int s;/ 一维数组中偶数位置的元素之和(2)公有成员函数l array(int *p,int n);/ 构造函数,用p所指数组初始化数据成员a和lenl void f();/ 根据题意求数据成员s的值l void print();/ 输出数据成员a和sl array();/ 析构函数,释放构造函数中分配的动态空间(3)在主函数中用数据1,2,3,4,5,6,7,8测试所定义的类array。输出:1 2 3 4 5 6 7 8sum=20【参考程序】#includeusing namespace std;class arrayint *a;int len;int s;public:array(int *p,int n)s=0;len=n;a=new intlen;for(int i=0;ilen;i+)ai=pi;void f()for(int i=0;ilen;i+)if(i+1)%2=0)s+=ai;void print()for(int i=0;ilen;i+)coutait;coutn;coutsum=sendl;array()delete a;int main()int t8=1,2,3,4,5,6,7,8;array test(t,8);test.f();test.print();return 0;3. 【题目】定义一个类ARRAY,求二维数组中外围元素(第1行、最后1行,第1列、最后一列)之和。具体要求如下:(1)私有数据成员l int b45;/ 存放二维数组l int s;/ 二维数组中外围元素之和(2)公有成员函数l ARRAY (int p5,int n);/ 构造函数,用p所指数组初始化数据成员bl void f();/ 根据题意求数据成员s的值l void print();/ 输出数据成员b和s(3)在主函数中用数据1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20测试所定义的类ARRAY。输出:1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 19 20sum=147【参考程序】#includeusing namespace std;class ARRAYint b45;int s;public:ARRAY(int p5,int n)s=0;for(int i=0;in;i+)for(int j=0;j5;j+)bij=pij;void f()for(int i=0;i4;i+)for(int j=0;j5;j+)if(i=0|i=3|j=0|j=4)s+=bij;void print()for(int i=0;i4;i+)for(int j=0;j5;j+)coutbijt;coutn;coutsum=sendl;int main()int t45=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20;ARRAY test(t,4);test.f();test.print();return 0;4. 【题目】定义一个类Sring,将字符串中的字符按ASCII值从小到大排序。具体要求如下:(1)私有数据成员l char str100;/ 存放字符串(2)公有成员函数l Sring (char *p);/ 构造函数,用p所指字符数组初始化数据成员strl void fun();/ 根据题意将str中的字符升序排列l void show();/ 输出数据成员str(3)在主函数中输入一个字符串对所定义的类Sring进行测试,要求输出排序前后的字符串。【参考程序】#include#includeusing namespace std;class Sringchar str100;public:Sring(char *p)strcpy(str,p);void fun()char *p1=str,*p2,*pmin,t;while(*(p1+1)pmin=p1;p2=p1+1;while(*p2)if(*p2*pmin)pmin=p2;p2+;if(pmin!=p1)t=*pmin,*pmin=*p1,*p1=t;p1+;void show()coutstr=strendl;int main()char t100;cin.getline(t,100);Sring test(t);cout原字符串为:t;test.show();test.fun();cout排序后的字符串为:t;test.show();return 0;5. 【题目】定义一个类STRING,求字符串中数字元素之和。如“as12QW24#$7gh”中数字元素之和为1+2+2+4+7=16,具体要求如下:(1)私有数据成员l char *str;/ 存放字符串l int sum;/ 数字元素之和(2)公有成员函数l STRING (char *p);/ 构造函数,用p所指字符数组初始化数据成员strl void fun();/ 根据题意求字符串中数字元素之和l void show();/ 输出数据成员str和suml STRING ();/ 析构函数,释放构造函数中分配的动态空间(3)在主函数中输入一个字符串对所定义的类STRING进行测试,要求输出字符串和字符串中数字元素之和。【参考程序】#include#includeusing namespace std;class STRINGchar *str;int sum;public:STRING(char *p)sum=0;str=new char

温馨提示

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

评论

0/150

提交评论