求职遭遇的问题(C#和C++)。(1)

来源:互联网 发布:网络是指由计算机或者 编辑:程序博客网 时间:2024/04/30 10:53

1,C#中的override的作用?

2,什么是.net framework框架?

3,C++中虚析构函数的作用?

 

1,C#中的override的作用?

 

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Text;
  4. namespace ConsoleApplication1
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             baseClass bc=new baseClass();
  11.             bc.prinf();
  12.             Console.WriteLine("---------------------");
  13.             class1 ct1 = new class1();
  14.             ct1.prinf();
  15.             bc = ct1;
  16.             bc.prinf();
  17.             Console.WriteLine("---------------------");
  18.             class2 ct2 = new class2();
  19.             ct2.prinf();
  20.             bc = ct2;
  21.             bc.prinf();
  22.             Console.ReadLine();
  23.         }
  24.     }
  25.     public class baseClass
  26.     {
  27.         private int index = 0;
  28.         public virtual void prinf()
  29.         {
  30.             Console.WriteLine("这是基类虚方法" + index.ToString());
  31.         }
  32.     }
  33.     public class class1 : baseClass
  34.     {
  35.         private int index = 1;
  36.         public override void prinf()
  37.         {
  38.             Console.WriteLine("这是子类新的方法" + index.ToString());
  39.         }
  40.     }
  41.     public class class2 : baseClass
  42.     {
  43.         private int index = 2;
  44.         public new void prinf()
  45.         {
  46.             Console.WriteLine("这是子类新的方法" + index.ToString());
  47.         }
  48.     }
  49. }

运行结果:

这是基类虚方法0

---------------------

这是子类新的方法1
这是子类新的方法1
---------------------
这是子类新的方法2
这是基类虚方法0

如上
使用override重写printf方法,通过父类引用一样只能看到重写后的方法;具有多态性质。
如果使用new隐藏printf方法,父类子类引用各自对应方法;没有多态性了。

原帖引用:http://www.cnblogs.com/cgy985/archive/2007/11/20/966118.html

 

.Net Framework

.NET Framework 是支持生成和运行下一代应用程序XML Web services 的内部 Windows 组件。.NET Framework 旨在实现下列目标:

  ·提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在 Internet 上分布,或者是在远程执行的。

  ·提供一个将软件部署和版本控制冲突最小化的代码执行环境。

  ·提供一个可提高代码(包括由未知的或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。

  ·提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。

  ·使开发人员的经验在面对类型大不相同的应用程序(如基于 Windows 的应用程序和基于 Web 的应用程序)时保持一致。

  ·按照工业标准生成所有通信,以确保基于 .NET Framework 的代码可与任何其他代码集成。

  .NET Framework 具有两个主要组件:公共语言运行库.NET Framework 类库

  公共语言运行库是 .NET Framework 的基础。您可以将公共语言运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。这类似于Java的虚拟机。事实上,代码管理的概念是公共语言运行库的基本原则。以公共语言运行库为目标的代码称为托管代码,而不以公共语言运行库为目标的代码称为非托管代码。

  .NET Framework 的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,您可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面 (GUI) 应用程序,也包括基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web services)。

 

虚析构函数的作用

我认为简单的说:基类的析构函数都应该使用虚析构函数,这样在使用多态时,调用的析构函数的顺序是先调用子类的析构函数,再调用父类的析构函数。如果不使用虚析构,则在使用多态时,析构函数没有多态性,只有基类的析构函数被调用,这是非常危险的。一下是引用文章:

我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明:   

    有下面的两个类:

class ClxBase

{

public:

    ClxBase() {}

    virtual ~ClxBase() { cout << "Output from the destructor of class ClxBase!" << endl; }

    virtual void DoSomething() { cout << "Do something in class ClxBase!" << endl; };

};

class ClxDerived : public ClxBase

{

public:

    ClxDerived() {}

    ~ClxDerived() { cout << "Output from the destructor of class ClxDerived!" << endl; }

    void DoSomething() { cout << "Do something in class ClxDerived!" << endl; };

};

    代码

ClxBase *pTest = new ClxDerived;

pTest->DoSomething();

delete pTest;

    的输出结果是:

Do something in class ClxDerived!

Output from the destructor of class ClxDerived!

Output from the destructor of class ClxBase!

    这个很简单,非常好理解。

    但是,如果把类ClxBase析构函数前的virtual去掉,那输出结果就是下面的样子了:

Do something in class ClxDerived!

Output from the destructor of class ClxBase!

    也就是说,类ClxDerived的析构函数根本没有被调用!一般情况下类的析构函数里面都是释放内存资源,而析构函数不被调用的话就会造成内存泄漏。我想所有的C++程序员都知道这样的危险性。当然,如果在析构函数中做了其他工作的话,那你的所有努力也都是白费力气。

    所以,文章开头的那个问题的答案就是--这样做是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。

    当然,并不是要把所有类的析构函数都写成虚函数。因为当类里面有虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间。所以,只有当一个类被用来作为基类的时候,才把析构函数写成虚函数。

原创粉丝点击