Tag: 构造函数

Python的“超级”如何做正确的事情?

我正在运行Python 2.5,因此这个问题可能不适用于Python 3.当您使用多重inheritance创build钻石类层次结构并创build派生类的对象时,Python将执行Right Thing(TM)。 它调用派生类的构造函数,然后从左到右列出父类,然后是祖父类。 我熟悉Python的MRO ; 那不是我的问题。 我很好奇从超级对象返回的对象实际上是如何pipe理的,以正确的顺序在父类中调用超级调用。 考虑这个例子代码: #!/usr/bin/python class A(object): def __init__(self): print "A init" class B(A): def __init__(self): print "B init" super(B, self).__init__() class C(A): def __init__(self): print "C init" super(C, self).__init__() class D(B, C): def __init__(self): print "D init" super(D, self).__init__() x = D() 代码做直观的事情,它打印: D init B init C […]

在C#中初始化一个Generic.List

在C#中,我可以使用以下语法初始化一个列表。 List<int> intList= new List<int>() { 1, 2, 3 }; 我想知道这个{}语法是如何工作的,如果它有一个名字。 有一个构造函数需要IEnumerable ,你可以调用它。 List<int> intList= new List<int>(new int[]{ 1, 2, 3 }); 这似乎更“标准”。 当我解构List的默认构造函数时,我只能看到 this._items = Array.Empty; 我希望能够做到这一点。 CustomClass abc = new CustomClass() {1, 2, 3}; 并能够使用1, 2, 3列表。 这个怎么用? 更新 Jon Skeet回答 它调用无参数的构造函数,然后调用Add: > List<int> tmp = new List<int>(); > tmp.Add(1); tmp.Add(2); tmp.Add(3); > […]

新的C ++ 11成员初始化特性是否在声明时使初始化列表过时了?

使用C ++ 11,我们现在可以在头文件声明中初始化类成员: class aClass { private: int mInt{100}; public: aClass(); ~aClass(); }; 所以我有点困惑。 传统上,构造函数中的初始化列表已被用于成员初始化: aClass::aClass() : mInt(100) { … } 新的C ++ 11成员初始化特性是否在声明时使初始化列表过时了? 如果不是的话,那么一个优于另一个呢? 什么情况会使声明初始化有利,或者初始化列表是否有利? 什么时候应该使用另一个?

施工人员是否应该遵守Liskov替代原则?

我通常试图确保我的对象实例符合Liskovreplace原则 ,但是我一直在想,人们是否也认为LSP也适用于构造函数呢? 我尝试了谷歌search,但我一直无法find任何强烈的意见。 我应该注意到,我的大部分代码都是在Ruby中,但是我有时会发现我的子类构造函数与父类稍有不同。 他们采用相同的基本参数集,通常是额外的参数。 有时这也会发生在其他类的方法。 在我的脑海里,这总是感觉像一个LSP的侵犯,但我想看看是否有其他人也这样认为。

PHP构造函数的目的

我正在使用类和对象类结构,但不是处于复杂的层次 – 只是类和函数,然后在一个地方实例化。 至于__construct和__destruct ,请告诉我很简单: 构造函数和析构函数的目的是什么? 我知道学校层面的理论解释,但是我期待着像现实世界中的东西,在哪些情况下我们必须使用它们。 请提供一个例子。 问候

隐藏工具类构造函数:工具类不应该有公共或默认的构造函数

我在Sonar上得到这个警告。我想要解决scheme在声呐上删除这个警告。 我的课是这样的: public class FilePathHelper { private static String resourcesPath; public static String getFilePath(HttpServletRequest request) { if(resourcesPath == null) { String serverpath=request.getSession().getServletContext().getRealPath(""); resourcesPath = serverpath + "/WEB-INF/classes/"; } return resourcesPath; } } 我想要适当的解决scheme,以消除声纳上的这个警告。

Python:inheritance超类__init__

我有一个很多__init__参数的基类: def BaseClass(object): def __init__(self, a, b, c, d, e, f, …): self._a=a+b self._b=b if b else a … 所有的inheritance类都应该运行基类的__init__方法。 我可以在每个要调用超类__init__的inheritance类中写一个__init__()方法,但这会是一个严重的代码重复: def A(BaseClass): def __init__(self, a, b, c, d, e, f, …): super(A, self).__init__(a, b, c, d, e, f, …) def B(BaseClass): def __init__(self, a, b, c, d, e, f, …): super(A, self).__init__(a, b, c, […]

为什么Java中的抽象类有构造函数?

为什么Java中的abstract类有一个constructor ? 什么是构造,因为我们不能实例化一个abstract类? 有什么想法吗?

C ++,是否有可能直接调用一个构造函数,没有新的?

我可以显式调用构造函数,而不使用new ,如果我已经有一个对象的内存? class Object1{ char *str; public: Object1(char*str1){ str=strdup(str1); puts("ctor"); puts(str); } ~Object1(){ puts("dtor"); puts(str); free(str); } }; Object1 ooo[2] = { Object1("I'm the first object"), Object1("I'm the 2nd") }; do_smth_useful(ooo); ooo[0].~Object1(); // call destructor ooo[0].Object1("I'm the 3rd object in place of first"); // ???? – reuse memory

是一个`=默认`移动构造函数等价于成员移动构造函数?

这是 struct Example { int a, b; Example(int mA, int mB) : a{mA}, b{mB} { } Example(const Example& mE) : a{mE.a}, b{mE.b} { } Example(Example&& mE) : a{move(mE.a)}, b{move(mE.b)} { } Example& operator=(const Example& mE) { a = mE.a; b = mE.b; return *this; } Example& operator=(Example&& mE) { a = move(mE.a); b = move(mE.b); […]