给出静态类型和动态类型的定义。
【出题思路】
区分静态类型和动态类型,熟悉其定义内容。
【解答】
静态类型在编译时就已经确定了,它是变量声明时的类型或表达式生成的类型;
而动态类型则是变量或表达式表示的内存中的对象的类型,动态类型直到运行时才能知道。如:
Quote *pQuote = new Bulk_quote;
指针 pQuote 的静态类型是Quote,在编译时就已经确定了。但是它的动态类型是Bulk_quote,直到运行时才能知道它指向的是基类还是派生类。如果一个变量非指针也非引用,则它的静态类型和动态类型永远一致。但基类的指针或引用的动态类型可能与其动态类型不一致。
在什么情况下表达式的静态类型可能与动态类型不同?请给出三个静态类型与动态类型不同的例子。
【出题思路】
具体举例说明静态类型与动态类型的不同。
【解答】
Bulk_quote bulk; Quote *pQuote=&bulk; Quote &rQuote=bulk; //传递给item的如果是派生类对象,即是静态类型和动态类型不同的情况 double print_total(ostream &os, const Quote &item, size_t n);
回忆我们在8.1节(第279页)进行的讨论,解释第284页中将ifstream传递给Sales_data的read函数的程序是如何工作的。
【出题思路】
理解静态类型和动态类型。
【解答】
在要求使用基类型对象的地方,可以使用派生类型的对象来代替,是静态类型和动态类型不同的典型例子。
本页共33段,1210个字符,2133 Byte(字节)