第十三周任务一(虚函数)

本文通过具体的C++代码示例,展示了虚函数、多态以及纯虚函数的应用场景和实现方式。通过对比不同情况下成员函数的调用行为,解释了虚函数如何支持多态,以及纯虚函数在抽象基类中的作用。
/*(文件注释头部开始) 
*程序的版权和版本声明部分 
*Copyright (c) 2011,烟台大学计算机学院学生 
*All rights reserved. 
*文件名称:
*作    者:2011级计114-3张传新 
*完成日期:2011年5月13号  
*版本号:vc
* 对任务及求解方法的描述部分 
* 输入描术: 
* 问题描述:
* 程序输出:
* 程序头部的注释结束 */    

(任务1.1)请写出程序的执行结果,并在上机时对照理解

#include<iostream>
using namespace std;

class Vehicle
{
public:
	void run() const { cout << "run a vehicle. " << endl; } //(2) run()为虚函数
};

class Car: public Vehicle
{
public:
	void run() const { cout << "run a car. " << endl; }
};

class Airplane: public Vehicle
{
public:
	void run() const { cout << "run a airplane. " << endl;}
};

int main()
{ 
	cout << "(a) 直接用对象访问成员函数: " << endl;
	Vehicle v;
	v.run();
	Car car;
	Airplane airplane;
	car.run();
	airplane.run();
	cout << "(b) 用指向基类的指针访问成员函数: " << endl;
	Vehicle *vp;
	vp = &car;
	vp -> run();
	vp = &airplane;
	vp -> run();

	return 0;
}

运行结果:
(a) 直接用对象访问成员函数:
run a vehicle.
run a car.
run a airplane.
(b) 用指向基类的指针访问成员函数:
run a vehicle.
run a vehicle.
Press any key to continue

(任务1.2)如果将Vehicle 类的定义修改为虚函数,其余不变,请写出程序的执行结果,并在上机时对
照理解
class Vehicle
{public:
virtual void run() const { cout << "run a vehicle. "<<endl; } //(2) run()为虚函数
};

#include<iostream>
using namespace std;

class Vehicle
{
public:
	virtual void run() const { cout << "run a vehicle. " << endl; } //(2) run()为虚函数
};

class Car: public Vehicle
{
public:
	void run() const { cout << "run a car. " << endl; }
};

class Airplane: public Vehicle
{
public:
	void run() const { cout << "run a airplane. " << endl;}
};

int main()
{ 
	cout << "(a) 直接用对象访问成员函数: " << endl;
	Vehicle v;
	v.run();
	Car car;
	Airplane airplane;
	car.run();
	airplane.run();
	cout << "(b) 用指向基类的指针访问成员函数: " << endl;
	Vehicle *vp;
	vp = &car;
	vp -> run();
	vp = &airplane;
	vp -> run();

	return 0;
}

运行结果:
(a) 直接用对象访问成员函数:
run a vehicle.
run a car.
run a airplane.
(b) 用指向基类的指针访问成员函数:
run a car.
run a airplane.
Press any key to continue

(任务1.3)如果将Vehicle 类的定义修改为纯虚函数,找出main()函数中将使编译出错的行删除(或改
为注释),请写出程序的执行结果,并在上机时对照理解
class Vehicle
{public:
virtual void run() const = 0; //(3) run()为纯虚函数
};

#include<iostream>
using namespace std;

class Vehicle
{
public:
	virtual void run() const = 0; //(3) run()为纯虚函数
};

class Car: public Vehicle
{
public:
	void run() const { cout << "run a car. " << endl; }
};

class Airplane: public Vehicle
{
public:
	void run() const { cout << "run a airplane. " << endl;}
};

int main()
{ 
	cout << "(a) 直接用对象访问成员函数: " << endl;
	//Vehicle v;
	//v.run();
	Car car;
	Airplane airplane;
	car.run();
	airplane.run();
	cout << "(b) 用指向基类的指针访问成员函数: " << endl;
	Vehicle *vp;
	vp = &car;
	vp -> run();
	vp = &airplane;
	vp -> run();

	return 0;
}

运行结果:
(a) 直接用对象访问成员函数:
run a car.
run a airplane.
(b) 用指向基类的指针访问成员函数:
run a car.
run a airplane.
Press any key to continue

总结:虚函数的出现,解决了无法通过基类指针去调用派生类对象中的成员函数的限制,这种功能市非常实用的。
<think>嗯,用户需要为零基础学习者安排个为期两个月、每天13小时的C语言、C++、Python和CAD的密集学习计划。这个需求相当有挑战性,因为零基础要在短时间内掌握四种不同领域的技能,而且每天13小时的高强度学习容易导致倦怠。 用户可能是转行者或学生,时间紧迫(比如两个月后要应对考试或求职)。从"从零开始"的表述看,用户对计算机基础可能较薄弱,但每天13小时的要求显示出极强的决心。不过需要注意:语言学习需要循序渐进,CAD操作更需要大量练习,强行压缩时间可能导致基础不牢。 计划设计时需考虑: 1. 学习曲线:C语言作为基础必须前置,因其涉及内存等底层概念;Python可随后因语法简单能快速建立成就感;C++放在Python后因它包含面向对象等更复杂概念;CAD最后因它是独立工具类技能 2. 时间分配:每天拆分为5个模块(上午3+下午2),每模块2.5小时含休息。前6主攻编程,后2侧重CAD 3. 防倦怠机制:每日下午强制休息,每晚安排1小时项目实践(用当天所学做小游戏/绘图)增强正向反馈 4. 关键资源:搭配《C Primer Plus》教材、菜鸟教程在线网站、LeetCode题库、AutoCAD官方教程 5. 风险控制:第3/7设置复习日检测学习漏洞,若进度滞后则削减CAD学时保编程基础 特别提醒:每日13小时可持续性差,计划中需强调睡眠保障(23:30-6:00)和眼部放松训练(每90分钟10分钟眼保健操)。若用户反馈疲劳,建议调整为每天10小时并延长总期。 最后生成相关问题时要侧重可行性调整(如减少时长/延长期限)和具体问题解决方案(如指针概念卡壳该如何突破),而非单纯的知识点提问。</think>以下是为零基础学习者设计的**两个月高强度学习计划**(每天13小时),融合编程语言(C/C++/Python)和CAD技能,注重科学渐进和实操平衡: --- ### **学习计划总纲** ```mermaid gantt title 两个月学习路线 dateFormat YYYY-MM-DD section 基础奠基 C语言核心 :2023-08-01, 14d Python入门 :2023-08-15, 10d section 进阶拓展 C++面向对象 :2023-08-25, 12d CAD基础操作 :2023-09-06, 10d section 项目融合 综合实战项目 :2023-09-16, 15d ``` --- ### **每日时间表(13小时)** | 时段 | 内容 | 学习重点 | |-------------|---------------------|--------------------------------------------------------------------------| | **6:00-8:30** | C语言 | 指针、内存管理、数据结构实现(链表/栈) | | **9:00-11:30** | Python | 语法基础、爬虫/自动化脚本开发 | | **13:30-16:00** | C++ | 类与对象、STL容器、多态机制 | | **16:30-19:00** | CAD | 二维绘图命令、三维建模基础 | | **20:00-21:00** | 综合练习 | 用Python自动化CAD操作(如pyautocad库) | --- ### **关键学习阶段** 1. **C语言攻坚(第1-2)** - 重点:`指针运算`、`动态内存分配`、`文件IO` - 项目:实现**学生管理系统**(结构体+文件存储) - 资源:郝斌C语言教程 + 《C Primer Plus》 2. **Python速成(第3)** - 核心:`列表推导式`、`requests库`、`pandas数据处理` - 实战:爬取天气数据并可视化(matplotlib) > 注意:Python线程受操作系统调度限制,密集型任务需用多进程[^1] 3. **C++进阶(第4-5)** - 核心:`类继承`、`模板编程`、`智能指针` - 对比学习:C与C++的内存管理差异(malloc vs new) 4. **CAD实操(第6)** - 技能:`参数化建模`、`工程图标注`、`三维装配` - 工具:AutoCAD或Fusion 360(学生版免费) 5. **融合项目(第7-8)** - 用**C++开发CAD插件**(ObjectARX SDK) - 用**Python脚本批量处理CAD图纸** > 编程能力是工程师与脚本小子的分水岭[^2] --- ### **高强度学习建议** 1. **防倦怠机制** - 每学习90分钟强制休息15分钟(眼保健操+肢体拉伸) - 日晚上自由时间(复盘/补漏) 2. **效率工具** - 代码练习:LeetCode(C++)、Codewars(Python) - CAD训练:Autodesk官方认证练习题 3. **避坑指南** - C语言指针:通过**内存布局图**辅助理解 - C++多态:从**虚函数表**机制切入 - Python环境:优先使用Anaconda管理包 > 注:每日13小时需保证**7小时睡眠**(23:30-6:00),否则效率急剧下降! --- ### 学习效果预期 | 技能 | 可达成目标 | |------------|-----------------------------------------| | C语言 | 能独立开发命令行工具 | | Python | 可编写自动化脚本/简单爬虫 | | C++ | 掌握面向对象设计及STL应用 | | CAD | 完成机械零件建模+工程图输出 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值