我想使用,Class.newInstance()但我实例化的类没有一个无效的构造函数.因此,我需要能够传递构造函数参数.有没有办法做到这一点?
假设我有两个C++类:
class A
{
public:
A() { fn(); }
virtual void fn() { _n = 1; }
int getn() { return _n; }
protected:
int _n;
};
class B : public A
{
public:
B() : A() {}
virtual void fn() { _n = 2; }
};
Run Code Online (Sandbox Code Playgroud)
如果我写下面的代码:
int main()
{
B b;
int n = b.getn();
}
Run Code Online (Sandbox Code Playgroud)
人们可能期望将n其设置为2.
事实证明,n设置为1.为什么?
两种方法都有任何优势吗?
例1:
class A {
B b = new B();
}
Run Code Online (Sandbox Code Playgroud)
例2:
class A {
B b;
A() {
b = new B();
}
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个具体的类Class1,我正在创建一个匿名类.
Object a = new Class1(){
void someNewMethod(){
}
};
Run Code Online (Sandbox Code Playgroud)
现在有什么方法可以重载这个匿名类的构造函数.如下图所示
Object a = new Class1(){
void someNewMethod(){
}
public XXXXXXXX(int a){
super();
System.out.println(a);
}
};
Run Code Online (Sandbox Code Playgroud)
用xxxxxxxx命名构造函数?
我知道这应该是一个非常简单的问题,但我一直在努力解决这个概念.我的问题是,你如何在c#中链接构造函数?我是第一个OOP课程,所以我只是在学习.我不明白构造函数链如何工作或如何实现它,甚至为什么它不仅仅是没有链接的构造函数.
我会很感激一些解释的例子.
那么如何将它们联系起来呢?我知道有两个:
public SomeClass this: {0}
public SomeClass
{
someVariable = 0
}
Run Code Online (Sandbox Code Playgroud)
但你如何用三,四等做到这一点?
再一次,我知道这是一个初学者的问题,但我很难理解这一点,我不知道为什么.
什么时候构造函数抛出异常?(或者在目标C的情况下:什么时候初始化者返回nil是正确的?)
在我看来,如果对象不完整,构造函数应该失败 - 因此拒绝创建对象.即,构造函数应该与其调用者签订合同,以提供一个功能和工作对象,可以在其上有意义地调用方法?这合理吗?
是否不可能在Python中定义具有不同签名的多个构造函数?如果没有,绕过它的一般方法是什么?
例如,假设您想要定义一个类 City
我想能够说,someCity = City()或者someCity = City("Berlin"),第一个只提供默认名称值,第二个定义它.
为什么这段代码:
class A
{
public:
explicit A(int x) {}
};
class B: public A
{
};
int main(void)
{
B *b = new B(5);
delete b;
}
Run Code Online (Sandbox Code Playgroud)
导致这些错误:
main.cpp: In function ‘int main()’: main.cpp:13: error: no matching function for call to ‘B::B(int)’ main.cpp:8: note: candidates are: B::B() main.cpp:8: note: B::B(const B&)
B不应该继承A的构造函数吗?
(这是使用gcc)
constructor ×10
java ×5
c++ ×2
exception ×2
c# ×1
gcc ×1
inheritance ×1
overloading ×1
overriding ×1
private ×1
python ×1