Fun和Do (超详细解析版)

描述

程序填空输出指定结果

#include <iostream> 
using namespace std;
class A { 
	private: 
	int nVal; 
	public: 
	void Fun() 
	{ cout << "A::Fun" << endl; }; 
	void Do() 
	{ cout << "A::Do" << endl; } 
}; 
class B:public A { 
	public: 
	virtual void Do() 
	{ cout << "B::Do" << endl;} 
}; 
class C:public B { 
	public: 
	void Do( ) 
	{ cout <<"C::Do"<<endl; } 
	void Fun() 
	{ cout << "C::Fun" << endl; } 
}; 
void Call(/* 在此处补充你的代码 */) { 
	p.Fun(); p.Do(); 
} 
int main() { 
	C c; 
	Call( c); 
	return 0;
}

输入

输出

A::Fun
C::Do

样例输入

None

样例输出

A::Fun 
C::Do

1. 先看第一行题目要求输出 A::Fun 这个由类A的公有函数输出的 而第二行输出 C::Do 是由类C中的Do函数输出

2. 可以发现类B中的Do函数是虚函数 类C是由类B派生而来的 所以类C中的Do函数也是虚函数  那么要输出第二行的C::Do有两种办法 一种是直接是有C类对象p  p.Do()输出  第二种就是由B类引用C类对象p输出(因为在B类中Do和C类中Do是虚函数 引用C类对象 则调用C类中的Do函数)

3. 根据第一行输出A::Fun 可以知道一定是调用了 A类中的函数Fun 而A类中Fun函数不是虚函数  所以会被C类中的Fun函数覆盖掉  如果是C类对象p 那么p.Fun调用的会是C类中的函数Fun  为了输出A::Fun 则应该调用A类中的Fun函数 所以应该是B类的引用(因为B类继承了A类的公有成员函数Fun) 所以B类引用p  p.Fun会输出A::Fun

答案如下:

void Call(B& p) {
    p.Fun(); p.Do();
}

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SML(Standard ML)是一种函数式编程语言,其数据格式通常使用 S-expression 表示。S-expression 是一种基于列表的嵌套数据结构,它由一些原子和列表组成。在 SML 中,可以使用 SML/NJ 库来进行 S-expression 的保存和解析。以下是一个基本的示例代码: ```sml (* 保存 S-expression 到文件 *) fun saveSexpToFile (sexp: SExp.sexp, filename: string) = let val file = TextIO.openOut filename val _ = SExpIO.output sexp file val _ = TextIO.closeOut file in () end (* 从文件中读取 S-expression *) fun loadSexpFromFile (filename: string) = let val file = TextIO.openIn filename val sexp = SExpIO.input file val _ = TextIO.closeIn file in sexp end ``` 在这个代码示例中,我们使用了 SML/NJ 库中的 SExp 和 SExpIO 模块。SExp 模块定义了 S-expression 的数据类型,而 SExpIO 模块则提供了输入输出 S-expression 的函数。 对于保存 S-expression 到文件,我们定义了一个 `saveSexpToFile` 函数,该函数接受一个 S-expression 和一个文件名作为参数,并将 S-expression 输出到指定的文件中。具体步骤是使用 `TextIO.openOut` 函数打开文件,使用 `SExpIO.output` 函数将 S-expression 写入文件,最后使用 `TextIO.closeOut` 函数关闭文件。 对于从文件中解析 S-expression,我们定义了一个 `loadSexpFromFile` 函数,该函数接受一个文件名作为参数,并返回从文件中读取的 S-expression。具体步骤是使用 `TextIO.openIn` 函数打开文件,使用 `SExpIO.input` 函数从文件中读取 S-expression,最后使用 `TextIO.closeIn` 函数关闭文件。 需要注意的是,以上代码示例中的 SML/NJ 库是针对 SML/NJ 环境的。如果你使用的是其他 SML 实现,可能需要使用该实现所提供的相应库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值