操作题   请使用VC6或使用【答题】菜单打开proj1下的工程proj1,此工程包含一个源程序文件proj1.cpp。文件中将表示数组元素个数的常量Size定义为4,并用int类型对类模板进行了实例化。文件中位于每个注释“// ERROR ****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:
    1  2  3  4
    注意:模板参数名用T。只修改注释“// ERROR *******found*******”的下一行语句,不要改动程序中的其他内容。
    //proj1.cpp
    #include <iostream>
    using namespace std;
    //将数组元素个数Size定义为4
    // ERROR *******found*******
    const int Size;
    template <typename T>
    class MyClass
    {
    public:
    MyClass (T * p)
    {
    for(int i=0;i < Size;i ++)
    array[i] = p[i];
    }
    void Print();
    private:
    T array[Size];
    };

    template <typename T>
    // ERROR *******found*******
    void MyClass::Print()
    {
    for(int i = 0;i <Size;i ++)
    cout << array[i] << '\t';
    }

    int main()
    {
    int intArray[Size] = {1,2,3,4};
    // ERROR *******found*******
    MyClass <double> obj (intArray);
    obj.Print();
    cout << endl;
    return 0;
    }
 
【正确答案】(1)const int Size=4; (2)void MyClass <T>::Print() (3)MyClass <int> obj(intArray); 答案考生文件夹
【答案解析】[考点] 主要考查的是模板类MyClass,其中涉及构造函数、成员函数和const变量。const变量必须进行初始化,因为const确定了该变量Size不能改变。模板类的成员在定义时要加上模板符号“<T>”,调用时也要注意添加相应的类型。 (1)主要考查考生对const变量的掌握,因为const变量不能修改,所以在定义的同时必须初始化。 (2)主要考查考生对模板类的成员函数定义的掌握,因为MyClass类是模板类,所以在定义该函数时要加上模板标识符“<T>”,即语句void MyClass<T>::Print()。 (3)主要考查考生对模板类构造函数的调用的理解,从上一条语句int intArray[Size]={1,2,3,4};中可以知道intArray为int型,因此定义obj时要使用<int>,即MyClass<int>obj(intArray);。 对于模板类,不论是其成员函数还是构造函数,调用时都要使用标识符“<T>”。