javascript

java

python

c#

android

node.js

c++

reactjs

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

构造函数-C ++默认构造函数

例如,当我不声明constructor时,编译器将为我提供default constructor,它没有参数也没有定义(正文),因此将不采取任何措施。

如果我现在不声明default constructor,则编译器将为我提供default destructor没有定义(body),因此,我认为不采取任何措施。

因此,例如,如果我完成了一个对象,那么default constructor不会重新分配该对象使用的(空闲)内存吗? 如果没有,我们为什么要得到它?

并且,也许相同的问题也适用于default constructor。如果它什么也不做,为什么默认情况下会为我们创建它?

谢谢。

trans by 2020-02-14T10:57:42Z

删除默认类构造函数的意义是什么?

我正在为我的CPP考试做准备,问题之一是:您可以删除默认的类构造函数吗,如果可以,原因是什么? 好的,所以显然您可以做到:

class MyClass 
{ 
  public: 
    MyClass() = delete; 
};

但是我不明白你为什么要这么做?

trans by 2020-02-10T01:30:38Z

java-Gson是否必须使用默认的无参数构造函数?

Gson用户指南指出,我们应该为任何可以正常使用Gson的类定义默认的无参数构造函数。 甚至,在Gson的InstanceCreator类上的javadoc中说,如果我们尝试对缺少默认构造函数的类实例进行反序列化,则会抛出异常,在这种情况下应使用InstanceCreator。 但是,我尝试对缺少默认构造函数的类使用Gson进行测试,并且序列化和反序列化工作都没有任何麻烦。

这是反序列化的代码。 没有非参数构造函数的类:

public class Mushroom {
    private String name;
    private double diameter;

    public Mushroom(String name, double diameter) {
        this.name = name;
        this.diameter = diameter;
    }

    //equals(), hashCode(), etc.
}

和一个测试:

@Test
public void deserializeMushroom() {
    assertEquals(
            new Mushroom("Fly agaric", 4.0),
            new Gson().fromJson(
                    "{name:\"Fly agaric\", diameter:4.0}", Mushroom.class));
}

效果很好。

所以我的问题是:我是否可以实际使用Gson而不需要使用默认构造函数,或者在任何情况下它都不起作用?

trans by 2020-01-22T02:43:43Z

J中的默认构造函数和继承

我对Java中的默认构造函数和继承有疑问。

通常,如果您编写一个类并且不包含任何构造函数,Java会自动为您提供一个默认构造函数(一个没有参数),该构造函数会使用一些默认值(0,null)来初始化该类的所有实例变量(如果有)。 ,或false)。 但是,如果您编写带有某些参数的构造函数,并且没有编写任何默认构造函数,则Java不提供默认构造函数。我的问题是:从其他类继承的类是什么情况-如果我编写的构造函数中包含一些参数,但不包括默认构造函数,那么它们是否继承了超类的默认构造函数?

trans by 2020-01-16T05:35:10Z

创建片段:构造函数与newInstance()

我最近对在创建static newInstance()时经常需要知道Bundle键来将参数传递给Fragment感到厌倦。因此,我决定为ImageRotatorFragment()创建构造函数,使其采用我想要设置的参数,并将这些变量正确地放入2684777224225686686 ImageRotatorFragment()键,因此不需要其他BundleActivities需要知道这些键的人。

public ImageRotatorFragment() {
    super();
    Log.v(TAG, "ImageRotatorFragment()");
}

public ImageRotatorFragment(int imageResourceId) {
    Log.v(TAG, "ImageRotatorFragment(int imageResourceId)");

    // Get arguments passed in, if any
    Bundle args = getArguments();
    if (args == null) {
        args = new Bundle();
    }
    // Add parameters to the argument bundle
    args.putInt(KEY_ARG_IMAGE_RES_ID, imageResourceId);
    setArguments(args);
}

然后,我像平常一样提出这些论点。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.v(TAG, "onCreate");

    // Set incoming parameters
    Bundle args = getArguments();
    if (args != null) {
        mImageResourceId = args.getInt(KEY_ARG_IMAGE_RES_ID, StaticData.getImageIds()[0]);
    }
    else {
        // Default image resource to the first image
        mImageResourceId = StaticData.getImageIds()[0];
    }
}

但是,Lint对此表示质疑,说不要让Bundle的子类具有带有其他参数的构造函数,这要求我使用Fragment甚至运行该应用程序。 问题是,此代码可以正常工作。 我可以使用static newInstance()或旧式方法ImageRotatorFragment(),并在其上手动调用setArguments()。 当Android需要重新创建Fragment(方向更改或内存不足)时,它将调用ImageRotatorFragment()构造函数,然后将相同的参数Bundle与我的值一起传递,这些值已正确设置。

因此,我一直在寻找“建议”方法,并看到了很多使用Bundle来创建带有参数的Fragment的示例,这似乎和我的构造函数一样。 因此,我亲自进行了测试,它的工作原理与以前一样完美无缺,但不对Lint抱怨过。

public static ImageRotatorFragment newInstance(int imageResourceId) {
    Log.v(TAG, "newInstance(int imageResourceId)");

    ImageRotatorFragment imageRotatorFragment = new ImageRotatorFragment();

    // Get arguments passed in, if any
    Bundle args = imageRotatorFragment.getArguments();
    if (args == null) {
        args = new Bundle();
    }
    // Add parameters to the argument bundle
    args.putInt(KEY_ARG_IMAGE_RES_ID, imageResourceId);
    imageRotatorFragment.setArguments(args);

    return imageRotatorFragment;
}

我个人发现,使用构造函数比知道使用Bundle和传递参数要普遍得多。 我相信您可以在Activity中使用相同的构造函数技术,并且Lint不会对此有所抱怨。 所以基本上我的问题是,为什么Google不希望您使用带有Bundle的参数的构造函数?

我唯一的猜测是,这样您就不会尝试不使用Bundle来设置实例变量,当重新创建Fragment时不会设置该变量。 通过使用static newInstance()方法,编译器将不允许您访问实例变量。

public ImageRotatorFragment(int imageResourceId) {
    Log.v(TAG, "ImageRotatorFragment(int imageResourceId)");

    mImageResourceId = imageResourceId;
}

我仍然觉得这不是在构造函数中禁止使用参数的充分理由。 其他人对此有见识吗?

trans by 2020-01-02T11:02:08Z

c#-我们是否应始终在类中包含默认构造函数?

一位同事问我这个问题,我们是否应该始终在类中包含默认构造函数? 如果是这样,为什么? 如果没有,为什么不呢?

public class Foo {

    Foo() { }

    Foo(int x, int y) {
        ...
    } 

}

我也想从专家那里得到一些启发。

trans by 2019-10-03T01:09:22Z

c ++ 11 - std :: array的默认初始化?

使用C ++ 11 std::array,我是否可以保证语法std::array<T, N> x;将默认初始化数组的所有元素?

编辑:如果没有,是否有一个语法可以在所有数组(包括零大小的数组)上工作,以将所有元素初始化为默认值?

编辑:在cppreference上,默认的构造函数描述说:

(constructor) (implicitly declared) (public member function)
default-constructs or copy-constructs every element of the array 

所以答案可能是肯定的。 但我想根据标准或未来标准确定这一点。

trans by 2019-09-20T09:18:55Z

使用反射在C#中创建没有默认构造函数的类型实例

以下面的课程为例:

class Sometype
{
    int someValue;

    public Sometype(int someValue)
    {
        this.someValue = someValue;
    }
}

然后我想使用反射创建这种类型的实例:

Type t = typeof(Sometype);
object o = Activator.CreateInstance(t);

通常这将起作用,但是因为SomeType尚未定义无参数构造函数,对Activator.CreateInstance的调用将抛出类型为MissingMethodException的异常,并显示消息“没有为此对象定义无参数构造函数”。 还有另一种方法可以创建这种类型的实例吗? 将无参数构造函数添加到我的所有类中会有点麻烦。

trans by 2019-09-11T01:01:07Z

hibernate - Kotlin和JPA:默认构造函数h

正如JPA所要求的那样,val类应具有默认(非arg)构造函数,以便在从数据库中检索对象时实例化对象。

在Kotlin中,在主构造函数中声明属性非常方便,如下例所示:

class Person(val name: String, val age: Int) { /* ... */ }

但是当非arg构造函数被声明为次要构造函数时,它需要传递主构造函数的值,因此需要它们的一些有效值,如下所示:

@Entity
class Person(val name: String, val age: Int) {
    private constructor(): this("", 0)
}

如果属性具有比valInt更复杂的类型且它们不可为空,则为它们提供值看起来非常糟糕,特别是当主构造函数和init块中有很多代码且参数为 积极使用 - 当他们通过反射重新分配时,大多数代码将再次执行。

此外,在构造函数执行后无法重新分配val属性,因此不可变性也会丢失。

所以问题是:Kotlin代码如何适应JPA而不需要代码重复,选择“神奇”的初始值和失去不变性?

附: 除了JPA之外,Hibernate是否可以构造没有默认构造函数的对象?

trans by 2019-08-04T19:42:08Z

c ++ - 自动生成默认/复制/移动ctor和复制/移动赋值运算符的条件?

我想在编译器通常自动生成默认构造函数,复制构造函数和赋值运算符的条件下刷新内存。

我记得有一些规则,但我不记得了,也无法在线找到有信誉的资源。 有人可以帮忙吗?

trans by 2019-07-02T04:07:13Z

c ++ 11 - std :: array的默认初始化?

使用C ++ 11 std::array,我是否可以保证语法std::array<T, N> x;将默认初始化数组的所有元素?

编辑:如果没有,是否有一个语法可以在所有数组(包括零大小的数组)上工作,以将所有元素初始化为默认值?

编辑:在cppreference上,默认的构造函数描述说:

(constructor) (implicitly declared) (public member function)
default-constructs or copy-constructs every element of the array 

所以答案可能是肯定的。 但我想根据标准或未来标准确定这一点。

trans by 2019-06-07T16:13:03Z

c# - 当您使用参数创建默认无参数构造函数时,为什么默认无参数构造函数会消失

在C#,C ++和Java中,当您创建一个使用参数的构造函数时,默认的无参数函数就会消失。 我一直都接受这个事实,但现在我开始想知道为什么。

这种行为的原因是什么? 它只是一个“安全措施/猜测”说“如果你已经创建了自己的构造函数,你可能不希望这个隐含的构造函数”?或者它是否有技术原因使得编译器在您自己创建构造函数后无法添加一个?

trans by 2019-04-24T17:45:32Z

c ++ - 带空括号的默认构造函数

有没有什么好的理由在C ++中调用默认构造函数时,一组空的圆括号(括号)无效?

MyObject  object;  // ok - default ctor
MyObject  object(blah); // ok

MyObject  object();  // error

我似乎每次都自动输入“()”。 是不是有一个很好的理由不允许这样做?

trans by 2019-04-12T11:42:01Z

1 共1页