精华内容
下载资源
问答
  • 简短答案肯定。当您使用Resolve方法时,这应该自动传递。例如:IUnityContainer container = new UnityContainer();var something = container.Resolve();另外,如果您想查看,这与Prism(CodePlex)使用技术...

    简短的答案是肯定的。

    当您使用Resolve方法时,这应该自动传递。

    例如:

    IUnityContainer container = new UnityContainer();

    var something = container.Resolve();

    另外,如果您想查看,这与Prism(CodePlex)使用的技术相同。

    更新增加测试:

    [TestClass]

    public class Spike

    {

    [TestMethod]

    public void unityTest()

    {

    var container = new UnityContainer();

    var something= container.Resolve();

    Assert.AreSame(container, something.Container);

    // This passes. Success.

    }

    }

    public class Something

    {

    public Something(IUnityContainer container)

    {

    Container = container;

    }

    public IUnityContainer Container { get; set; }

    }

    展开全文
  • 构造函数构造函数是用来创建新对象的函数 – 确切地说,它创建是复合类型实例。在 Julia 中,类型对象也同时充当构造函数角色:可以用类名加参数元组方式像函数调用一样来创建新实例。对很多类型来说,通过...

    构造函数

    构造函数是用来创建新对象的函数 – 确切地说,它创建的是复合类型的实例。在 Julia 中,类型对象也同时充当构造函数的角色:可以用类名加参数元组的方式像函数调用一样来创建新实例。

    cd730e0910cb4af3ea1c9cfba9f8d245.png

    对很多类型来说,通过给所有成员赋值来创建新对象的这种方式就足以用于产生新实例了。然而,在某些情形下,创建复合对象需要更多的功能。有时必须通过检查或转化参数来确保固有属性不变。递归数据结构,特别是那些可能引用自身的数据结构,它们通常不能被干净地构造,而是需要首先被不完整地构造,然后再通过编程的方式完成补全。为了方便,有时需要用较少的参数或者不同类型的参数来创建对象,Julia 的对象构造系统解决了所有这些问题。

    外部构造方法

    构造函数与 Julia 中的其他任何函数一样,其整体行为由其各个方法的组合行为定义。因此,只要定义新方法就可以向构造函数添加功能。例如,假设你想为 Foo 对象添加一个构造方法,该方法只接受一个参数并其作为 bar 和 baz 的值。同样,也可以为 Foo 添加新的零参数构造方法,它为 bar 和 baz 提供默认值。

    ae33e7ce46df02d19a7ec4571ecc1d6e.png

    上图中的零参数构造方法会调用单参数构造方法,单参数构造方法又调用了自动提供默认值的双参数构造方法。上面附加的这类构造方法,它们的声明方式与普通的方法一样,像这样的构造方法被称为外部构造方法,下文很快就会揭示这样称呼的原因。外部构造方法只能通过调用其他构造方法来创建新实例,比如自动提供默认值的构造方法。

    内部构造方法

    尽管外部构造方法成功地为构造对象提供了额外的便利,但它无法解决另外两个在前面提到的问题:确保固有属性不变和允许创建自引用对象。因此,我们需要内部构造方法。内部构造方法和外部构造方法很相像,但有两点不同:

    1. 内部构造方法在 struct-block 的内部声明,而不是和普通方法一样在外部。
    2. 内部构造方法能够访问一个特殊的局部函数 new,此函数能够创建该类型的对象。

    例如,假设我们要声明一个保存一对实数的类型,但要约束第一个数不大于第二个数。

    d1f5ff44ab0ca6bcdb1d46d05cd3768c.png

    如上图所示, OrderedPair 对象只能在 x <= y 时被成功构造。

    如果类型被声明为 mutable,我们可以直接更改成员变量的值来打破这个固有属性,然而,在未经允许的情况下,随意摆弄对象的内核一般都是不好的行为。我们可以在以后任何时候提供额外的外部构造方法,但一旦类型被声明了,就没有办法来添加更多的内部构造方法了。由于外部构造方法只能通过调用其它的构造方法来创建对象,所以最终构造对象的一定是某个内部构造函数。这保证了类型的对象必须是经过内部构造才得已存在,从而在某种程度上保证了类型的固有属性。

    只要定义了任何一个内部构造方法,Julia 就不会再提供默认的构造方法:它会假定你已经为自己提供了所需的所有内部构造方法。默认构造方法等效于一个你自己编写的内部构造函数,该函数将所有成员作为参数(如果相应的成员具有类型,则约束为正确的类型),并将它们传递给 new,最后返回结果对象。

    julia> struct Foo bar baz Foo(bar,baz) = new(bar,baz) end

    这个声明与前面没有显式内部构造方法的 Foo 类型的定义效果相同。 以下两个类型是等价的 – 一个具有默认构造方法,另一个具有显式构造方法。

    95b0b8a513f37ad9346eca7222ac147a.png

    提供尽可能少的内部构造方法是一种良好的形式:仅在需要显式地处理所有参数,以及强制执行必要的错误检查和转换时候才使用内部构造。其它用于提供便利的构造方法,比如提供默认值或辅助转换,应该定义为外部构造函数,然后再通过调用内部构造函数来执行繁重的工作。这种解耦是很自然的。

    展开全文
  • 拷贝构造函数

    2019-05-13 01:23:44
    拷贝构造函数是一种特殊的构造函数,同样是初始化一个对象,不过其状态依赖于被拷贝对象。 什么是拷贝构造 如果一个构造函数的第一个参数是一个自身类类型的引用,且任何额外参数都有默认值。则此构造函数是拷贝构造...

    一、为什么需要拷贝构造函数?

    拷贝构造函数是一种特殊的构造函数,同样是初始化一个对象,不过其状态依赖于被拷贝对象。

    二、什么是拷贝构造

    如果一个构造函数的第一个参数是一个自身类类型的引用,且任何额外参数都有默认值。则此构造函数是拷贝构造函数。

    class A
    {
        A(const A &){};
    }
    

    三、什么时候调用拷贝构造

    • 拷贝初始化(b=a b(a)
    • 非引参数传入传出
    • 容器、聚合类列表初始化
    • 容器插入(push_back() insert()

    四、怎么使用拷贝构造函数

    class TA
    {
    public:
    	TA(){std::cout<<"构造函数调用"<<endl;}
     // TA(const TA &)=delete;
      TA(const TA &){cout<<"拷贝构造函数调用"<<endl;}
    	int c=3;
    	int d=4;
    };
    struct C
    {
    	int a;
    	int b;
    	class TA ta;
    };
    
    int main()
    {
      class TA ta;
      class TA tb=ta;//拷贝初始化
      fun_passby_value(ta);//传入非引用值
      fun_returnby_value();//返回非引用值
      struct TA arrC[10]={ta,ta,ta,ta};//花括号数组相应成员的拷贝构造
      struct C cc1={1,2,ta};//花括号聚合类相应成员的拷贝构造
      //cc1={2,4,ta};//OK!
    
    }
    
    void fun_passby_value(class TA a)
    {
    
    }
    
    class TA fun_returnby_value()
    {
       class TA d;
       return d;
    }
    

    五、其他注意事项

    为了效率,拷贝构造函数可能会被编译器优化而进行直接初始化。虽然编译器进行了优化,但是对应的拷贝访问控制仍然有效(不能是delete或者private)。

    展开全文
  • 拷贝构造函数

    2018-11-11 21:17:00
    拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象。 复制对象把它作为...

    定义:如果一个构造函数第一个参数是自身类型的引用,且任何额外参数都有默认值,则此构造函数就是拷贝构造函数。

    拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:

    • 通过使用另一个同类型的对象来初始化新创建的对象。

    • 复制对象把它作为参数传递给函数。

    • 复制对象,并从函数返回这个对象。

    如果在类中没有定义拷贝构造函数,编译器会自行定义一个。

    如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。拷贝构造函数的最常见形式如下:

    classname (const classname &obj) {
       // 构造函数的主体
    }
     
    通常的原则是:①对于凡是包含动态分配成员或包含指针成员的类都应该提供拷贝构造函数;②在提供拷贝构造函数的同时,还应该考虑重载"="赋值操作符号。
     

    转载于:https://www.cnblogs.com/nanqiang/p/9943608.html

    展开全文
  • 答:拷贝构造函数其实也是构造函数,只不过它的参数是const自身的对象的引用。如果类里面没有指针成员(该指针成员指向动态申请空间),是没有必要编写拷贝构造函数的。我们知道,如果有一个类CObj,它已经...
  • 拷贝构造函数首先是一个构造函数,它调用时候产生一个对象,是通过参数传进来那个对象来初始化,产生的对象。...还要注意是拷贝构造函数是构造函数,不返回值;而赋值函数需要返回一个对象自身的引用,以便赋值之
  • 重载拷贝构造函数

    2020-04-20 22:43:37
    拷贝构造函数的定义:如果一个构造函数的第一个参数是自身类型 引用,且任何额外参数都有默认值。 何时调用拷贝构造函数: ▪ 新建一个对象并将其初始化为同类现有对象时,拷贝构造函数都将被调用。 ▪ 默认拷贝...
  • 拷贝构造函数关于指针拷贝问题

    千次阅读 2017-03-23 18:49:42
    1.拷贝构造函数的定义:如果一个构造函数的第一个参数是自身类型的引用,且任何额外参数都有默认值。 !拷贝构造函数的第一个参数必须是一个引用类型。 合成拷贝构造函数: 如果我们没有为一个类定义拷贝构造函数,...
  • 拷贝构造函数:第一个参数是自身的引用,且任何额外参数都有默认值 类成员类型决定了拷贝方式,类类型成员,调用拷贝构造函数,内置类型成员直接拷贝。 拷贝初始化通常使用拷贝构造函数或移动构造函数来完成...
  • C++拷贝构造函数与拷贝赋值运算符

    千次阅读 2019-04-20 21:44:45
    拷贝构造函数定义了当同类型另一个对象初始化本对象时做什么,如果一个构造函数第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。拷贝构造函数参数类型最好是const 引用...
  • 拷贝构造函数和深拷贝例子

    千次阅读 2018-08-03 09:54:32
    1.拷贝构造函数也是一个构造函数,用来构造对象,只有在对象定义时起作用,其第一个参数是自身类型的引用,其他任何参数均带有默认值.(如果第一个参数不是引用类型,因为构造拷贝对象时必须调用拷贝构造函数,那么...
  • 拷贝构造函数的第一个参数是自身引用,单一的参数 MyClass::MyClass (const MyClass&); 类自己没有自己的copy,也没有移动构造或者赋值 那么隐含的构造函数提供,简单的执行自己成员的复制. class MyClass ...
  • 当我们定义一个类时候。我们通常会显式或隐式指定在此类的对象在创建、移动、销毁时候要做些什么。 一个类通常通过定义五种特殊成员函数...如果一个构造函数的第一个参数是自身类型的引用,且任何额外参数...
  • 拷贝构造函数 如果一个构造函数第一个参数是自身类类型的引用,且额外参数都有默认值,则此构造函数是拷贝构造函数。 每个成员类型决定了它如何拷贝:类类型成员,会使用拷贝构造函数来拷贝;内置类型成员...
  • 拷贝构造函数与拷贝赋值操作符

    千次阅读 2016-09-24 09:23:56
     如果一个构造函数第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。 class Foo { public: Foo(); // 默认构造函数 Foo(const Foo &); // 拷贝构造函数 // ... }; ...
  • ​ 拷贝构造函数在名称上与普通构造函数一样,在参数上不一样:要加个const,而且入参一个引用——而且一个与自身数据类型完全相同的对象。 ​ 拷贝构造函数的定义:类名(const 类名 &对象参数名) ​ ...
  • 拷贝构造函数其实也是构造函数,只不过它的参数是const自身的对象的引用。如果类里没有指针成员(该指针成员指向动态申请空间),是没有必要编写拷贝构造函数的。 拷贝构造函数常用三种情况: (1)定义新...
  • 类中定义了五种特殊成员函数来控制对象的拷贝、移动、赋值和销毁操作,包括拷贝构造函数、...拷贝构造函数的第一个形参必须是自身类类型的引用,且任何其他参数都有默认值。 拷贝构造函数的第一个形参必须是引用
  • 特征:第一个参数是自身类类型的引用,且任何额外参数都有默认值 class Foo { public: Foo(); // 默认构造函数 Foo(const Foo &); // 拷贝构造函数 //... }; 注意: 如果没有为一个类定义拷贝构造函数,...
  • 1)类中成员函数(包括构造函数、析构函数)都有一个隐藏当前类类类型指针参数,名为this。在成员函数中访问类中其它成员,其本质都通过this来实现。 2)对于普通成员函数,this指针就是指向该成员函数...
  • 要求构造函数的参数自身类类型的引用 类名::类名(const 类名 & 引用名,。。。) 调用复制构造函数的时机 当说明语句建立对象时,可以调用复制构造函数进行数据初始化,另外,当函数 具有类类型传值参数或者...
  • Cpp_析构函数

    2016-02-28 15:48:54
    1.this指针1)每个类的构造函数和成员函数中都包含一个隐藏的该类类型的指针参数,名为this,该指针指向调用这个成员函数或正在被构造的对象。成员函数和构造函数中对该类其它成员的访问,都通过this指针进行的。...
  • 定义 第一个参数是自身引用类型(必须是引用类型),且任何额外参数都有默认值 合成拷贝构造函数 编译器合成 (默认一定会生成) 初始化方式 直接初始化 ;编译器选择普通函数与所给参数最匹配的构造函数 拷贝初始...
  • Cpp_this指针与常函数

    2016-02-28 15:50:21
    1.this指针1)每个类的构造函数和成员函数中都包含一个隐藏的该类类型的指针参数,名为this,该指针指向调用这个成员函数或正在被构造的对象。成员函数和构造函数中对该类其它成员的访问,都通过this指针进行的。...
  • Day06 面向对象—封装、继承、多态一、封装1.1 原则 把不需要对外提供访问的内容都隐藏起来,仅对外提供公共访问...this(xx) 调用的本类中的对应参数的构造函数 this语句:用于构造函数间相互调用。只能定义在构造函
  • C++赋值运算符函数

    2017-08-12 10:26:00
    2. 传入参数类型应声明为该class常量引用,因为1)如果传入的参数是实例,从形参到实参会调用一次赋值构造函数增大开销 2)加上const关键字避免改变传入参数对应实例; 3. 注意释放该实例自身已有...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 168
精华内容 67
关键字:

参数是自身对象引用的构造函数是