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是从虚函数表中得到函数地址的。