如果我创建一个类并定义它的公共构造函数,我也创建了父类的子类,它也有构造函数。
那我怎么能从子类的一个方法中调用这两个构造函数呢?我的意思是如何从php中的子类的一个方法调用两个或更多构造函数?
答案 0 :(得分:0)
在C ++中:
您只需创建子对象即可调用。
当你刚创建一个子对象时,它首先调用Parent Constructor,然后调用子构造函数。
示例:
Class Parent {
void Parent :: Parent() {
cout << "I am parent Constructor!" << endl;
}
};
Class Child : Public Parent() {
void Child :: Child() {
cout << "I am Child Constructor" << endl;
}
};
int main() {
Child childobj;
}
输出:
"I am parent Constructor!"
"I am Child Constructor"
class Parent {
public function __construct($bypass = false) {
// Only perform actions inside if not bypassing.
if (!$bypass) {
}
}
}
class Child extends Parent {
public function __construct() {
$bypassPapa = true;
parent::__construct($bypassPapa);
}
}
答案 1 :(得分:-1)
在C#中; 当您创建子类的实例时,如果基类具有无参数构造函数,则将调用它。但是如果基类有参数构造函数,你可以通过遵循语法来调用它的构造函数。
Class SubClass : BaseClass(...)
{
...
}
为了在其他方法中调用构造函数,您需要有一个由构造函数调用的protected
方法,然后您可以从另一个方法调用它。请注意,您不能从另一个方法调用构造函数,因为它是一种实例化的机制(它应该在创建该类型的实例时调用)
答案 2 :(得分:-1)
我正在回答这个问题,特别是基于C ++编程,因为我不确定您使用的是哪种OOP语言,但我希望原则(如果不是具体的语法)将适用。
当您定义具有至少一个构造函数的类时,编译器将不会生成隐式构造函数。因此,如果为基类定义的构造函数需要参数,则它们必须包含在子类中构造函数的特定调用中,因为不会有任何无参数构造函数要调用。
class Parent
{
public:
Parent(int a,int a)
:a(a),
b(b)
{
cout<<"Parent constructor "<<a<<b;
}
~Parent()
{}
private:
int a;
int b;
};
class Child : public Parent
{
public:
Child()
:c(5) //error: implicit constructor for Parent is not found
{
cout<<"Child constructor "<<c;
}
~Child()
{}
private:
int c;
};
int main()
{
Child x;
return 0;
}
可以通过在Child类的构造函数中包含对Parent构造函数的调用来纠正此问题,如下所示:
.
.
.
Child()
:Parent(3,4), // Explicit call to Parent constructor
c(5)
{
cout<<"Child constructor "<<c;
}
.
.
.
希望这有帮助。