1) MS笔试题目之一:C++类继承直接的重载问题virtual
判断下面程序的输出结果
class A
{
public:
virtual void P(){cout<<"A"<<endl;}
};
class B:public A
{
public:
void P(){cout<<"B"<<endl;}
};
class C:public B
{
public:
void P(){cout<<"C"<<endl;}
};
void main(){
C* pC = new C();
((A*)pC)->P();
((B*)pC)->P();
((C*)pC)->P();
}
输出结果为:
C
C
C/
注意:如果class A中的P函数不是vtrual的,那么输出结果就是:
A
B
C
可见,virtural的作用是当用基类的指针指向子类的函数时,调用子类的函数。
2) MS笔试题目之二:
编写一个简单的语言语法检查器:
a) 变量名称以字母开头的任意字符组成;但是关键字Loop和End不能作为变量名称;
b) 只有int数据类型,并且无限大,没有溢出的可能;
c) 有四种操作类型:
i. ZeroSet:V1=0;
ii. ValueAssignment:V1=V2;
iii. AddOne ;V1++;
iv. Loop:
Loop(v)
A++;
B=A;
End
可以嵌套,并且嵌套中的v变化并不影响loop参数中的v变化,比如:
Loop(v1)
Loop(v2)
v2++;
End;
End;
其中v1=2,v2=2,那么此里外两个循环均运行两次,里面的v2++并没有影响外面的循环次数。
d) 无非零的常量;
e) 无比较和if语句。
Q1:编写一个语法检查函数
Bool TaoGrammarChecker(int statementCount, char* codes[])
此函数参数分别是:statementCount记录的是codes数组的大小;codes数组中记录的是每条语句。
其中有已存在的函数,来检查四个操作
Bool IsValidZeroSetStatement(char* codes);
Bool IsValidValueAssignmentStatement(char* codes);
Bool IsValidAddOneStatement(char* codes);
Bool IsValidLoopStartStatement(char* codes);
Bool IsValidLoopEndStatement(char* codes);
比如IsValidZeroSetStatement函数,作用是如果codes语句是ZeroSet操作,则返回true;否则返回false。
Q2:编写test cases来对上面的程序进行测试,注意case的分类
Q3:利用Tao语言来编写自减函数,比如输入是a,则返回a-1的值。如果a为0,则返回0;
Q4:假设已经存在“--”,类似c语言中的功能。利用Tao语言来编写“-=”函数,类似c语言中的-=,比如“a-=b”。如果a小于b则返回0。
Q5:假设“-=”存在,利用Tao语言编写a被b整除的功能。不用考虑b为零的情况。