发布时间: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)