C++/CLI思辨录之代理构造函数

2016-02-19 12:18 2 1 收藏

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的C++/CLI思辨录之代理构造函数,过去的都会过去,迎接崭新的开始,释放更美好的自己。

【 tulaoshi.com - 编程语言 】

现在我们讨论一下新的C++/CLI环境下的一个很酷的特性,称作代理构造函数。

  对一个类来说,有多个构造函数是经常的事;并且这多个构造函数有一段共同的代码也很经常。一般地,在这种情况下,我们都是为该共同代码段编写一个独立的函数,然后放在每个构造器中调用。如下例:

class Foo
{
  private:
   int _mem;
  public:
   Foo() : _mem(0)
   {
    CommonConstructor();
   }
   Foo(int mem) : _mem(mem)
   {
    CommonConstructor();
   }
   Foo(const Foo& f) : _mem(f._mem)
   {
    CommonConstructor();
   }
   // 我们所有的构造器都需要的代码段
   void CommonConstructor()
   {
    printf("Constructing the object");
   }
};

  但是现在利用C++/CLI引入的新特性-代理构造器,我们可以从一个称为基类构造器的构造器中调用另一个构造器。当你这样做时,执行控制转入到第二个构造器中,在其执行完后再返回到第一个构造器。下面代码片断中的类Foo2演示了这种方法:

class Foo2
{
  private:
   int _mem;
  public:
   // 该构造器调用第二个称为基类构造器的构造器
   Foo2() : Foo2(0)
   {
   }
   // 下面这个构造器包含由所有构造器使用的公共代码
   Foo2(int mem) : _mem(mem)
   {
    printf("Constructing the object");
   }
   Foo2(const Foo2& f) : Foo2(f._mem)
   {
   }
};

  然而,每个类都应该包含至少一个非代理构造器,不过该构造器仍然可以有调用一个或者多个基类构造器的初始化操作。

  注意,早期情况下,如果你想试用一下代理构造函数,应该会出现一个编译错误。请注意,这是由于资源问题缺乏导致的,在现在版本的C++/CLI中可以避免这一错误。

来源:https://www.tulaoshi.com/n/20160219/1600541.html

延伸阅读
C++类对象的复制-拷贝构造函数(深拷贝,浅拷贝),进一步理解类成员的操作! 在学习这一章内容前我们已经学习过了类的构造函数和析构函数的相关知识,对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; 自己定义的类的对象同样是对象,谁也不能阻止我们用以下的方式进行复制,例如: //程序作者:管宁 ...
请注重,这一节内容是c++的重点,要非凡注重! 我们先说一下什么是构造函数? !-- frame contents -- !-- /frame contents -- 上一个教程我们简单说了关于类的一些基本内容,对于类对象成员的初始化我们始终是建立成员函数然后手工调用该函数对成员进行赋值的,那么在c++中对于类来说有没有更方便的方式能...
看如下代码: 代码如下: #includeiostream class TestConstructor { public:     TestConstructor()     {         std::cout"TestConstructor()"std::endl;     }     ~TestConstructor()     {     &...
最近我访问了中国的上海和北京,参加在两地举办的微软 Tech-ED 技术大会,在那里我非常荣幸地向大家介绍了我们在 C++/CLI 方面的工作。大家的反馈非常之好,非凡是中国年轻一代程序员对 C++/CLI 的热爱和理解给我留下了深刻的印象。在那里,我还熟悉了来自上海的一位开发人员,同时也是一位技术作者, 李建忠 先生。我们经过讨论之后决定合作撰...
你不应该在构造或析构期间调用虚函数,因为这样的调用不会如你想象那样工作,而且它们做的事情保证会让你很郁闷。如果你转为 Java 或 C# 程序员,也请你密切关注本文,因为在 C++ 急转弯的地方,那些语言也紧急转了一个弯。 假设你有一套模拟股票处理的类层次结构,例如,购入流程,出售流程等。对这样的处理来说可以核查是非常重要的,所...

经验教程

806

收藏

23
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部