15第十二周实践项目——程序阅读
来源:互联网 发布:mac 抹掉磁盘 编辑:程序博客网 时间:2024/05/29 06:43
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作 者:李晓凯
* 完成日期:2015年 5 月 24 日
* 版 本 号:v1.0
*
* 问题描述:
* 输入描述:
* 程序输出:
*/
(1)
#include <iostream>using namespace std;class A{public: A() { a=0; } A (int i) { a=i; } void print() { cout<<a<<" "; }private: int a;};class B: public A{public: B() { b=0; } B(int i, int j, int k): A(i),aa(j) { b=k; } //思考:这3处出现的print,有何区别 void print() //(1) { A::print(); //(2) aa.print(); //(3) cout<<b<<endl; }private: int b; A aa;};int main(){ B test[2]; test[0]=B(1,4,7); test[1]=B(2,5,8); for(int i=0; i<2; i++) test[i].print(); return 0;}
(2)
#include <iostream>using namespace std;class A{public: A(char *s) { cout<<s<<endl; }};class B:public A{public: B(char *s1, char *s2):A(s1) { cout<<s2<<endl; }};class C:public A{public: C(char *s1,char *s2):A(s1) { cout<<s2<<endl; }};class D:public B, C{public: D(char *s1,char *s2,char *s3,char *s4):B(s1,s2),C(s3,s4) { cout<<s4<<endl; }};int main(){ D d("class A","class B","class C","class D"); return 0;}
(3)
#include <iostream>using namespace std;class Base{public: Base(char i) { cout<<"Base constructor. --"<<i<<endl; }};class Derived1:virtual public Base{public: Derived1(char i,char j):Base(i) { cout<<"Derived1 constructor. --"<<j<<endl; }};class Derived2:virtual public Base{public: Derived2(char i,char j):Base(i) { cout<<"Derived2 constructor. --"<<j<<endl; }};class MyDerived:public Derived1,public Derived2{public: MyDerived(char i,char j,char k,char l,char m,char n,char x): Derived2(i,j), Derived1(k,l), Base(m), d(n) { cout<<"MyDerived constructor. --"<<x<<endl; }private: Base d;};int main(){ MyDerived obj('A','B','C','D','E','F','G'); return 0;}
(4)
#include<iostream>using namespace std;class A{public: int n;};class B:public A {}; // class B:virtual public A{};class C:public A {}; // class C:virtual public A{};class D:public B,public C{public: int getn() {return B::n;}};int main(){ D d; d.B::n=10; d.C::n=20; cout<<d.getn()<<endl; return 0;}
问题:
将程序中有注释的两条语句修改为注释的内容,即将“class B:public A {};”修改为“class B:virtual public A{};”,“class C:public A {}; ”修改为“class C:virtual public A{};”,重新编译运行程序,程序的运行结果又是多少?
答案:20
原因:在D类中只有一个n,而没有B类和C类之分,所以输出20.
(5)阅读下面类的定义,请说出在测试函数中不同情况的调用产生的结果
#include <iostream>using namespace std;class A{protected: int a,b;public: A(int aa, int bb):a(aa), b(bb) {} void printA() { cout<<"a: "<<a<<"\tb: "<<b<<endl; }};class B: public A{ int c;public: B(int aa, int bb, int cc):A(aa,bb),c(cc) {} void printB() { cout<<"a: "<<a<<"\tb: "<<b<<"\tc: "<<c<<endl; }};int main(){ A a(1,1); B b(2,3,4); //此处加入下面各小题中的代码 return 0;}①
a=b; a.printA(); b.printA(); b.printB();
②
b=a; a.printA(); b.printA(); b.printB();
程序会发生编译错误,原因是:____基类不能对派生类赋值______
③
A &r1=a; A &r2=b; r1.printA(); r2.printA(); r2.printB();将会发生错误的一行删除;r2.printB();
那一行的错误原因是:_______r2是类A的对象,不能调用类B的成员函数___________
④
A *p=&a; p->printA(); p=&b; p->printA(); p->printB();将会发生错误的一行删除;p->printB();
那一行的错误原因是:_______指针对象p属于A,不能指向类B中的成员函数___________
⑤
类A中加入以下代码:
int getA(){return a;}main函数前加以下代码:
void f(A x){ cout<<"aaaaah, my a: "<<x.getA()<<endl;}main中指定部分代码:
f(a); f(b);
0 0
- 15第十二周实践项目——程序阅读
- 第十二周上机实践项目-阅读程序-1
- 第十二周上机实践项目-阅读程序-1-(3)
- 第十二周上机实践项目-阅读程序-4
- 第十二周项目一——阅读程序(1)
- 第十二周项目一——阅读程序(2)
- 第十二周项目一——阅读程序(3)
- 第十二周项目一——阅读程序(4)
- 第十二周项目一——阅读程序(5)
- 第十二周项目一——程序阅读(1)
- 第十二周项目一——程序阅读(2)
- 第十二周项目一——程序阅读(3)
- 第十二周项目一——程序阅读(4)
- 第十二周项目一——程序阅读(5)
- 第十二周项目一——程序阅读(6)
- 第十二周项目一——阅读程序(1.2)
- 第十二周项目一——阅读程序(4)
- 第十二周项目一——阅读程序(5)
- 提高第32课时,自测
- Irrlicht游戏引擎(V0.1)源码学习系列之一
- LeetCode 25 - Reverse Nodes in k-Group
- C++构造与析构(3) - 析构函数
- 关于文件和目录的几个函数
- 15第十二周实践项目——程序阅读
- 浏览器窗口放大缩小后页面内容居中解决方法
- HDU 1232--并查集
- Windows程序基础二:句柄、HINSTANCE句柄
- 修改Android手机的默认安装位置 为SDCard手机卡
- Warning: mysql_connect(): mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication
- 第11周项目2-职员有薪水啦(2)
- spring四种依赖注入
- 第12周 阅读程序-多重继承5