程序员面试题精选100题(62)-C/C++/C#面试题(5)(2)
时间:2019-09-22
return Name;
}
}
class Program
{
static void Main(string[] args)
{
ArrayList array = new ArrayList();
Person jim = new Person() {Name = "Jim"};
array.Add(jim);
Person first = (Person)array[0];
first.Name = "Peter";
Console.WriteLine(array[0].ToString());
}
}
答案:Person的定义是一个struct,因此是一个值类型。在运行到语句Person first = (Person)array[0]的时候,first是array[0]的一个拷贝,first和array[0]不是一个实例。因此修改first对array[0]没有影响。
问题(25):运行下面的C++代码,打印的结果是什么?
-
class Base
-
{
-
public:
-
void print() { doPrint();}
-
-
private:
-
virtual void doPrint() {cout << "Base::doPrint" << endl;}
-
};
-
-
class Derived : public Base
-
{
-
private:
-
virtual void doPrint() {cout << "Derived::doPrint" << endl;}
-
};
-
-
int _tmain(int argc, _TCHAR* argv[])
-
{
-
Base b;
-
b.print();
-
-
Derived d;
-
d.print();
-
-
return 0;
-
}
答案:输出两行,分别是Base::doPrint和Derived::doPrint。在print中调用doPrint时,doPrint()的写法和this->doPrint()是等价的,因此将根据实际的类型调用对应的doPrint。所以结果是分别调用的是Base::doPrint和Derived::doPrint2。如果感兴趣,可以查看一下汇编代码,就能看出来调用doPrint是从虚函数表中得到函数地址的。