C++ 是否可以替换父类?
如果我有一个从另一个继承的类,是否可以替换子类中继承的类?下面我有一个演示,演示了我要做的事情,但我不确定语法C++ 是否可以替换父类?,c++,C++,如果我有一个从另一个继承的类,是否可以替换子类中继承的类?下面我有一个演示,演示了我要做的事情,但我不确定语法 #include <iostream> class singleNum { public: int m_a; singleNum(int a) { std::cout << "SETUP" << std::endl; m_a = a; } ~singleNum() {
#include <iostream>
class singleNum
{
public:
int m_a;
singleNum(int a)
{
std::cout << "SETUP" << std::endl;
m_a = a;
}
~singleNum()
{
std::cout << "CLOSEDOWN" << std::endl;
}
};
class inheritor : public singleNum
{
public:
inheritor(int a) : singleNum(a) {};
reset(int b)
{
singleNum::this = *singleNum(b);
}
};
int main()
{
inheritor z(5);
std::cout << z.m_a << std::endl;
z.reset(5);
return 0;
}
#包括
类singleNum
{
公众:
国际货币基金组织;
singleNum(inta)
{
标准::不能
无法交换或重置基类。如果它有自己的重置方法,则可以调用此方法,但不能再次调用构造函数
如果您想这样做,您应该这样做。然后您可以创建一个内部合成类的全新实例并替换现有实例。否
无法交换或重置基类。如果它有自己的重置方法,则可以调用此方法,但不能再次调用构造函数
如果您想这样做,您应该这样做。然后您可以创建内部合成类的全新实例并替换现有实例。您当前的演示并不难实现,但您需要修改父类:
#include <iostream>
class singleNum
{
public:
int m_a;
singleNum(int a)
{
std::cout << "SETUP" << std::endl;
reset(a);
}
~singleNum()
{
std::cout << "CLOSEDOWN" << std::endl;
}
virtual void reset(int b)
{
m_a = b;
}
};
class inheritor : public singleNum
{
public:
inheritor(int a) : singleNum(a) {}
void reset(int b) override
{
singleNum::reset(b);
}
};
int main()
{
inheritor z(5);
std::cout << z.m_a << std::endl;
z.reset(5);
return 0;
}
#包括
类singleNum
{
公众:
国际货币基金组织;
singleNum(inta)
{
std::cout您当前的演示并不难实现,但您需要修改父类:
#include <iostream>
class singleNum
{
public:
int m_a;
singleNum(int a)
{
std::cout << "SETUP" << std::endl;
reset(a);
}
~singleNum()
{
std::cout << "CLOSEDOWN" << std::endl;
}
virtual void reset(int b)
{
m_a = b;
}
};
class inheritor : public singleNum
{
public:
inheritor(int a) : singleNum(a) {}
void reset(int b) override
{
singleNum::reset(b);
}
};
int main()
{
inheritor z(5);
std::cout << z.m_a << std::endl;
z.reset(5);
return 0;
}
#包括
类singleNum
{
公众:
国际货币基金组织;
singleNum(inta)
{
你说的“替换”是什么意思?我们不能从代码中推断出,您自己承认,实际上并没有达到您的目标。@BoundaryPosition故意切片,如果我理解正确。在运行时,请删除父实现,并替换新构造的实现。如果我理解正确,您希望在子类中更改父c的属性lass.我将在父类的方法中实现此功能。要么是公共方法,要么是受保护的方法,然后由子类重新实现为公共方法。看起来像是设计气味,但是op=
有什么问题吗?你说的“替换”是什么意思?我们不能从代码中推断出,您自己承认,实际上并没有达到您的目标。@BoundaryPosition故意切片,如果我理解正确。在运行时,请删除父实现,并替换新构造的实现。如果我理解正确,您希望在子类中更改父c的属性lass.我将在父类的方法中实现此功能。要么是公共方法,要么是受保护的方法,然后由子类重新实现为公共。这似乎是一种设计气味,但是op=
有什么问题吗?