2013级C++第13周(春)项目——继承的进一步话题与GUI应用开发

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接

第一部分 程序阅读:阅读下面类的定义,请说出在测试函数中不同情况的调用产生的结果

#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;
}

(1)

    a=b;
    a.printA();
    b.printA();
    b.printB();

你认为输出结果是:______________________
运行程序的结果是:______________________

(2)

    b=a;
    a.printA();
    b.printA();
    b.printB();

程序会发生编译错误,原因是:__________
记录下IDE中提示的错误并理解:_________

(3)

    A &r1=a;
    A &r2=b;
    r1.printA();
    r2.printA();
    r2.printB();

将会发生错误的一行删除;
对余下的程序,你认为输出是:__________
实际运行的输出是:____________________
那一行的错误原因是:__________________

(4)

    A *p=&a;
    p->printA();
    p=&b;
    p->printA();
    p->printB();

将会发生错误的一行删除;
对余下的程序,你认为输出是:__________
实际运行的输出是:____________________
那一行的错误原因是:__________________

(5)
在class A中增加成员函数: int getA(){return a;}
在main函数前增加一般函数:

void f(A x)
{
    cout<<"aaaaah, my a: "<<x.getA()<<endl;
}

main函数中指定部分为:

    f(a);
    f(b);

你认为输出结果是:______________________
运行程序的结果是:______________________

第2部分 实践项目
【项目1 - 点、圆的关系】
(1)先建立一个Point(点)类,包含数据成员x,y(坐标点);
(2)以Point为基类,派生出一个Circle(圆)类,增加数据成员(半径),基类的成员表示圆心;
(3)编写上述两类中的构造、析构函数及必要运算符重载函数(本项目主要是输入输出);
(4)定义友元函数int locate,判断点p与圆的位置关系(返回值<0圆内,==0圆上,>0 圆外);

int main( )
{
	Circle c1(3,2,4),c2(4,5,5);      //c2应该大于c1
	Point p1(1,1),p2(3,-2),p3(7,3);  //分别位于c1内、上、外

	cout<<"圆c1: "<<c1;

	cout<<"点p1: "<<p1;
	cout<<"点p1在圆c1之"<<((locate(p1, c1)>0)?"外":((locate(p1, c1)<0)?"内":"上"))<<endl;

	cout<<"点p2: "<<p2;
	cout<<"点p2在圆c1之"<<((locate(p2, c1)>0)?"外":((locate(p2, c1)<0)?"内":"上"))<<endl;

	cout<<"点p3: "<<p3;
	cout<<"点p3在圆c1之"<<((locate(p3, c1)>0)?"外":((locate(p3, c1)<0)?"内":"上"))<<endl;
	return 0;
}

【项目2 - 圆的比较】
   在项目1的基础上,在圆类上重载关系运算符(6种),使之能够按圆的面积比较两个圆的大小。自编main函数完成测试。

【项目3 - 与圆心相连的直线】
  在项目1中定义的Point(点)类和Circle(圆)类基础上,设计一种方案,输出给定一点p与圆心相连成的直线与圆的两个交点。
  提示:
  

【项目4 - GUI应用程序开发实践】
  这实际上已经不是一个项目的问题,而是开启一个新的历程。当C++基础已经具备,完全可以通过更进一步的实践,在校园中开始开发经验的积累。我们用wxWidgets起步,按《wxWidgets初学者导引》中的指导开始学习、实践。指导书PDF版及附件在http://download.csdn.net/detail/sxhelijian/7365537

================= 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
|== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====
时间: 2025-01-02 15:23:19

2013级C++第13周(春)项目——继承的进一步话题与GUI应用开发的相关文章

2013级C++第2周(春)项目——结构体应用大体验

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759,由课程主页,可以看到完整教学方案,所有参考解答 第一部分 结构体应用 [项目1-学生成绩统计]   每位同学的信息学号.姓名.C++.高数.英语成绩,定义一个学生成绩的结构体数组,其中的数据成员包括学号(char num[12]).姓名(name).三门课的成绩(grade).总分(score).均分(average)). (1)从键盘上输入N名学生的信息(N定义为常变量

2013级C++第11周(春)项目——通过继承拥有基类的资源

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 (注:本课资料由第9周直接到第11周,因为第10周是我校春假期,全校休课.春假,实际是五一.清明.端午打包一起休息,这亲戚的做法对按周安排活动的学校更好一些.) 第一部分 程序阅读 程序阅读1:  #include<iostream> using namespace std; class A { private: int x; protect

2013级C++第9周(春)项目——运算符重载(二)

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [程序阅读]阅读程序"简单C++学生信息管理系统",找出其中出现构造函数.友元函数.运算符重载.静态数成员语法现象出现的位置,仔细体会其用法,在以后的设计中能够灵活应用有关方法和技巧 项目1-3直接复制第8周的代码,加入要求的运算符重载定义后,作为第9周的任务另外发博文.[项目1]在第8周项目1基础上(1)再定义一目运算符 -,-c相

2013级C++第15周(春)项目——输入输出流及文件文件操作

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 本周程序阅读及程序调试中需要的文件,请到http://pan.baidu.com/s/1qW59HTi下载. 第一部分 阅读程序(运行程序时,由上面的链接下载源代码)1.阅读教材例13.1到例13.7的程序,根据所用到的函数在功能上的限制,自己设计输入的测试数据,运行程序.(1)与自己的期望结果相对照,理解各个函数的用法:(2)深入理解数据流类

2013级C++第8周(春)项目——运算符重载

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目1]实现复数类中的运算符重载(1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除 class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r; imag=i;} Complex operator+(C

2013级C++第16周(春)项目——二进制文件及字符流

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 本周程序阅读及程序调试中需要的文件,请到http://pan.baidu.com/s/1i3LxmDZ下载.期末临近,为适应OJ平台及熟悉内容,请自抽时间完成OJ平台的有关练习. 第一部分 阅读程序1.仔细研读例13.16.例13.17和例13.18(见下载链接),体会二进制文件和字符串流操作的一般方法.2.阅读下面的程序,指出其功能,并对比例

2013级C++第6周(春)项目——对象指针、const

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759,由课程主页,可以看到完整教学方案,所有参考解答 推荐"玻璃罩const"系列的三篇文章(http://blog.csdn.net/sxhelijian/article/details/7385683),掌握利用const完成数据保护. 1. 使用常对象--为共用数据加装一个名为const的玻璃罩: 2. 常(const)+ 对象 + 指针:玻璃罩到底保护哪一个:

2013级C++第4周(春)项目——再和对象找感觉

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759,由课程主页,可以看到完整教学方案,所有参考解答 有网友在我的博客中,在2011级的页面上留言问:"老师,为什么有的学生写着写着就不更新了呢?"这是我常想起来的痛.我没有能够让我的弟子们开成习惯,这是要我们大家一起解决的问题. 有些同学近日的低迷,读读<大学.软件外包>可能会有启发.生命的流程走上了这条分支,就在这条分支上前行. 在BB平台恢复正常之前

2013级C++第3周(春)项目——第一次见对象

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759,由课程主页,可以看到完整教学方案,所有参考解答 在程序设计方面,我们进入了有对象的时代.坏消息是,我们需要在思维方式和表达方式方面再有所改变了,需要再跨一道坎:好消息是,新的方式将更加靠近我们人类本来的思维模式.我们要意识到,大学就是要让自己发生改变的,不断改变自己,改变我们的学习,这本身也是一件令人兴奋的事. 由于教材中这部分注重概念,而对展示程序本身的形态方面有所不足