标签: multiple-constructors

在PHP中执行多个构造函数的最佳方法

您不能在PHP类中放置两个带有唯一参数签名的__construct函数.我想这样做:

class Student 
{
   protected $id;
   protected $name;
   // etc.

   public function __construct($id){
       $this->id = $id;
      // other members are still uninitialized
   }

   public function __construct($row_from_database){
       $this->id = $row_from_database->id;
       $this->name = $row_from_database->name;
       // etc.
   }
}
Run Code Online (Sandbox Code Playgroud)

在PHP中执行此操作的最佳方法是什么?

php constructor multiple-constructors

329
推荐指数
9
解决办法
17万
查看次数

在Scala中,如何使用多个构造函数对Java类进行子类化?

假设我有一个带有多个构造函数的Java类:

class Base {
    Base(int arg1) {...};
    Base(String arg2) {...};
    Base(double arg3) {...};
}
Run Code Online (Sandbox Code Playgroud)

如何在Scala中扩展它并仍然提供对Base的所有三个构造函数的访问?在Scala中,子类只能调用其中一个超类的构造函数.我该如何解决这条规则?

假设Java类是我无法更改的遗留代码.

java constructor scala multiple-constructors

57
推荐指数
2
解决办法
9562
查看次数

选择不可复制对象的构造函数

假设我有一个不可复制的类,其中包含多个类似的构造函数

class Foo: boost::noncopyable
{
  public:
    Foo(std::string s) {...};  // construct one way        
    Foo(int i) {...};  // construct another way
 }
Run Code Online (Sandbox Code Playgroud)

现在,我想构造一个对象,并选择在运行时使用哪个构造函数:

我可以用这样的指针做到: -

boost::shared_ptr<Foo> f;

if (condition)
  f.reset(new Foo(myString));
else
  f.reset(new Foo(myInteger));

// common code follows
f->doSomethingComplicated(...);
Run Code Online (Sandbox Code Playgroud)

但这感觉很麻烦而且很慢.是否有一种简单的方法可以选择对象的构造函数而无需动态分配?


更多细节:Foo上面的类只是为了说明问题.涉及的实际类是Windows Gdiplus::Bitmap- http://msdn.microsoft.com/en-gb/library/windows/desktop/ms534420(v=vs.85). ASPX

c++ boost noncopyable multiple-constructors

12
推荐指数
1
解决办法
745
查看次数

如何在Android-Scala应用程序中扩展ImageView?

我通过关键字在谷歌尝试了许多解决方案:多个构造函数,scala,继承,子类.

似乎没有人适合这个场合.ImageView有三个构造函数:

ImageView(context)
ImageView(context,attribute set)
ImageView(context,attribute set, style)
Run Code Online (Sandbox Code Playgroud)

在scala中,您只能扩展其中一个.使用更完整的构造函数(ImageView(context,attribute set, style))并传递默认值的解决方案也不起作用,因为构造函数ImageView(context)执行的操作与其他两个构造函数完全不同.

使用特征或伴随对象的一些解决方案似乎不起作用,因为CustomView必须是一个类!我的意思是我不是唯一一个使用这个类的人(所以我可以按照我想要的方式编写scala代码)还有使用这个类的android-sdk,是的,它必须是一个类.

target是一个扩展ImageView的CustomView,所有这些工作:

new CustomView(context)
new CustomView(context,attribute set)
new CustomView(context,attribute set, style)
Run Code Online (Sandbox Code Playgroud)

如果您需要进一步澄清这个棘手的问题,请告诉我!

inheritance android scala multiple-constructors

11
推荐指数
3
解决办法
1219
查看次数

类构造函数的boost :: shared_ptr的默认值

假设我有类似的课程

class A{
    public:
    A(int a, boost::shared_ptr<int> ptr){
        // whatever!
    }
};
Run Code Online (Sandbox Code Playgroud)

我的问题是,该ptr的默认值是多少?我希望能够使用创建该类的实例

A myA(5);
Run Code Online (Sandbox Code Playgroud)

当然我知道我可以用一个参数创建另一个构造函数,但我正在寻找类似的东西

A(int a, boost::shared_ptr<int> ptr = WAT?)
Run Code Online (Sandbox Code Playgroud)

可能吗?目前我正在使用双构造方式,但这样做会很棒.

c++ boost smart-pointers multiple-constructors

10
推荐指数
1
解决办法
6970
查看次数

具有多个构造函数的MEF构造函数参数

我开始使用MEF,我有一个包含多个构造函数的类,如下所示:

[Export(typeof(ifoo))]
class foo : ifoo {
    void foo() { ... }
    [ImportingConstructor]
    void foo(object par1) { ... }
}
Run Code Online (Sandbox Code Playgroud)

catalog.ComposeExportedValue()在编写时使用它来par1 为第二个构造函数提供值:

...
catalog.ComposeExportedValue(par1Value);
catalog.ComposeParts(this);
...
Run Code Online (Sandbox Code Playgroud)

要保存我正在使用的组件:

[ImportMany(typeof(ifoo))]
public List<Lazy<ifoo, ifoometadata>> FooList { get; set; }
Run Code Online (Sandbox Code Playgroud)

为了创建foo我正在使用value属性的实例,FooList[0].Value.

Everthing工作正常,但从foo不调用类的第二个构造函数.怎么了?

当MEF实例化类时,如何选择我想要使用的构造函数?

.net c# mef multiple-constructors

8
推荐指数
1
解决办法
1万
查看次数

哪种更好的Java编程实践:堆栈枚举和枚举构造函数,或子类化?

鉴于有限数量的项目有所不同,用堆叠的枚举和枚举构造函数表示它们还是将它们子类化更好?或者是否有更好的方法?

为了给你一些背景,在我的小RPG程序中(具有讽刺意味的是简单),角色在他或她的库存中有不同种类的物品.项目因类型,用途和效果而异.

例如,一个库存项目是一个名为Gremlin的拼写滚动,用于调整Utility属性.另一件物品可能是一把名为Mort的剑,用于战斗并造成伤害.

在我的RPG代码中,我现在尝试了两种表示库存项目的方法.一个办法是子类(例如,InventoryItem - >拼写 - > AdjustingAttributes; InventoryItem - >武器 - >剑)并在需要时实例化每个子类,以及诸如像的Gremlin和莫特名称分配值.

另一种方法是堆叠枚举和枚举构造函数.例如,我为itemCategory和itemSpellTypes以及itemWeaponTypes创建了枚举,而InventoryItem枚举是这样的:

public enum InventoryItem {
   GREMLIN(itemType.SPELL, itemSpellTypes.ATTRIBUTE, Attribute.UTILITY),
   MORT(itemType.WEAPON, itemWeaponTypes.SWORD, 30);

   InventoryItem(itemType typeOfItem, itemSpellTypes spellType, Attribute attAdjusted) {
   // snip, enum logic here
   }
   InventoryItem(itemType typeOfItem, itemWeaponTypes weaponType, int dmg) {
   // snip, enum logic here 
   }
   // and so on, for all the permutations of items. 

}
Run Code Online (Sandbox Code Playgroud)

是否有比这两种方法更好的Java编程实践?或者,如果这些是唯一的方式,哪两个更好?提前感谢您的建议.

java enums multiple-constructors subclassing

7
推荐指数
3
解决办法
1650
查看次数

C#中的this()和base()构造函数

似乎没有用于指定this()和base()构造函数的语言语法.给出以下代码:

public class Bar : Foo
{
    public Bar()
      :base(1)
      //:this(0)
    { }
    public Bar(int schmalue)
      :Foo(1)
    {
       //Gobs of initialization code
       ...
       Schmalue = schmalue;
    }

    public int Schmalue { get; private set; }
}

public class Foo
{
    public Foo()
    {
        Value = 0;
    }

    public class Foo(int value)
    {
        Value = value;
    }

    public int Value { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

编译器给出了一个错误,指出在取消注释:this(0)调用时预期'{'.这很麻烦,因为它导致我将我的代码分解为私有方法,当明确提供此功能以防止这样的事情.

我只是做错了吗?我试过没有分隔符,分号,逗号......这似乎只是开发团队的疏忽.我很感兴趣为什么这个被省略了,如果我以错误的方式解决这个问题,或者是否有人对替代方案提出了很好的建议.

.net multiple-constructors

7
推荐指数
1
解决办法
1639
查看次数

关于C#中构造函数的几个问题

在C#中关于构造函数的继承:

  1. 我已经读过构造函数不能被继承.
  2. 如果基类包含一个或多个构造函数,派生类必须始终调用其中一个?派生类不可能跳过基类的构造函数吗?
  3. 派生类可以有自己的构造函数,但必须调用其中一个基类构造函数.

这些陈述是否更正?

.net c# inheritance constructor multiple-constructors

7
推荐指数
1
解决办法
1493
查看次数

如何实现可以接受不同数量参数的php构造函数?

如何实现可以接受不同数量参数的php构造函数?

喜欢

class Person {
    function __construct() { 
        // some fancy implementation
    } 
} 

$a = new Person('John');
$b = new Person('Jane', 'Doe');
$c = new Person('John', 'Doe', '25');
Run Code Online (Sandbox Code Playgroud)

在php中实现这个的最佳方法是什么?

谢谢,米洛

php constructor multiple-constructors

7
推荐指数
1
解决办法
9543
查看次数