发布时间:2019-09-22整理:admin阅读:
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是从虚函数表中得到函数地址的。
欢迎分享转载→ 程序员面试题精选100题(62)-C/C++/C#面试题(5)(2)