Tag: 构造函数

C ++构造函数名称后面的冒号是做什么的?

这个冒号运算符(“:”)在这个构造函数中做什么? 它相当于MyClass(m_classID = -1, m_userdata = 0); ? class MyClass { public: MyClass() : m_classID(-1), m_userdata(0) { } int m_classID; void *m_userdata; };

方法与Java中的构造函数

我刚刚开始用Java编程。 在谈论方法和构造函数时,我们使用的文本是缺乏的。 我不确定什么是方法或构造函数,是什么使每个独特的。 有人能帮我定义他们并区分两者吗?

没有参数的构造函数没有括号是语言标准吗?

我正在使用g ++编译一个Cygwin中的C ++程序,而且我有一个构造函数没有参数的类。 我有线: MyClass myObj(); myObj.function1(); 而当试图编译它,我得到的消息: 错误:请求“myObj”中的成员'function1',它是非types的'MyClass()()' 经过一番研究,我发现修正是把第一行改成myClass myObj; 我可以发誓我已经用C ++中的圆括号做了空的构造函数声明。 这可能是我正在使用的编译器的限制还是语言标准真的说不使用不带参数的构造函数括号?

什么是C ++中的转换构造函数? 这是为了什么?

我听说C ++有一些名为“转换构造函数”或“转换构造函数”的东西。 这些是什么,它们是什么? 我看到它提到这个代码: class MyClass { public: int a, b; MyClass( int i ) {} } int main() { MyClass M = 1 ; }

如何检测一个函数是否被称为构造函数?

给定一个函数: function x(arg) { return 30; } 你可以通过两种方式来调用它: result = x(4); result = new x(4); 第一个返回30,第二个返回一个对象。 你怎么能检测函数在函数内部被调用的方式? 无论您的解决scheme是什么,它也必须与以下调用一起工作: var Z = new x(); Z.lolol = x; Z.lolol(); 目前所有的解决scheme都认为Z.lolol()将其称为构造函数。

定义构造函数签名的接口?

奇怪的是,这是我第一次碰到这个问题,但是: 你如何定义一个C#接口的构造函数? 编辑 有些人想要一个例子(这是一个自由时间的项目,所以是的,这是一个游戏) IDrawable +更新 +绘制 为了能够更新(检查屏幕边缘等),并绘制自己将始终需要一个GraphicsDeviceManager 。 所以我想确保对象有一个参考。 这将属于构造函数。 现在我写下来了,我想我在这里实现的是IObservable和GraphicsDeviceManager应该采用IDrawable …看来要么我没有得到XNA框架,或框架不是很好。 编辑 在接口的上下文中,我对构造函数的定义似乎有些困惑。 一个接口确实不能实例化,所以不需要构造函数。 我想定义的是一个构造函数的签名。 完全像一个接口可以定义一个特定方法的签名,接口可以定义一个构造函数的签名。

在Java中使用初始化与构造函数

所以我最近一直在研究Java技术,并且发现了一些我以前不知道的function。 静态和实例初始化器是两种这样的技术。 我的问题是什么时候会使用初始化,而不是在构造函数中包含代码? 我想到了一些明显的可能性: 静态/实例初始化可以用来设置“最终”静态/实例variables的值,而构造函数不能 静态初始化器可以用来设置类中的任何静态variables的值,这应该比每个构造函数的开头有一个“if(someStaticVar == null)// do stuff”代码块更有效率 这两种情况都假设设置这些variables所需的代码比简单的“var = value”更复杂,否则似乎没有任何理由使用初始化程序,而不是在声明variables时简单地设置值。 然而,虽然这些并不是微不足道的收益(特别是设置最终variables的能力),但似乎应该使用初始化器的情况似乎有限。 人们当然可以使用一个初始化器来完成构造函数中的大量工作,但是我并不认为这样做的理由。 即使一个类的所有构造函数都共享了大量的代码,使用私有的initialize()函数似乎比使用初始值设定项更有意义,因为它不会locking您在编写新代码时运行该代码构造函数。 我错过了什么吗? 是否还有一些其他情况下应该使用初始化器? 或者,这真的只是一个相当有限的工具,用于非常具体的情况?

使用new和without实例化一个对象有什么不同

在C ++中, 除了dynamic内存分配,以下两行代码之间还有一个function差异: Time t (12, 0, 0); //t is a Time object Time* t = new Time(12, 0, 0);//t is a pointer to a dynamically allocated Time object 我当然假设已经定义了一个Time(int,int,int)ctor。 我也意识到,在第二种情况下,t将被删除,因为它被分配在堆上。 还有其他的区别吗?

构造函数可以在Java中引发exception吗?

允许构造函数抛出exception吗?

当我在我的类的构造函数中声明并初始化它们时,为什么我的字段初始化为null或默认值为零?

这是一个典型的问题和答案,类似的问题,这个问题是阴影的结果。 我在我的类中定义了两个字段,一个是引用types,另一个是基本types。 在类的构造函数中,我尝试将它们初始化为一些自定义值。 当我稍后查询这些字段的值时,它们会返回Java的缺省值,对于引用types为null ,对于基本types为0。 为什么发生这种情况? 这是一个可重现的例子: public class Sample { public static void main(String[] args) throws Exception { StringArray array = new StringArray(); System.out.println(array.getCapacity()); // prints 0 System.out.println(array.getElements()); // prints null } } class StringArray { private String[] elements; private int capacity; public StringArray() { int capacity = 10; String[] elements; elements = new […]