使用字符串时不能重写多态性
Polymorphism can't override when using string
> dec C 中的Polymorphism
,不适用于字符串
我正在使用Dev C++ 5.9.2.
我有一个父类A
,类B,C,D,E
.....extends A
和类list
是我使用B,C,D.
的主要类
我不使用父A
,因为我想重用构造函数A。
问题如下
class A
{
public:
virtual void show(){
printf("A");
}
private:
string tokenS;
};
class B :public A
{
public:
virtual void show(){
printf("B:");
// return 0;
}
}
class list
{
public:
A* getNode(){
return pta;
}
void setNode(B temp){
this->pta=&temp;
}
protected:
private:
A *pt1;
};
int main(){
list ls;
B b1;
ls.setNode(b1);
ls.getNode()->show();
}
如果我使用
string tokenS
结果:A如果我使用
char* tokenS
结果:B:
我不明白它,如果我创建类并使用它,我有同样的错误
class Date
{
// code
};
class A
{
public:
virtual void show(){
printf("A");
}
private:
Date day;
};
class B :public A
{
public:
virtual void show(){
printf("B:");
// return 0;
}
}
问题就在这里:
void setNode(B temp){
this->pta=&temp;
}
这会将pta
设置为指向temp
,但当函数结束时temp
不再存在。这是修复它并保留多态性的方法:
class A
{
public:
virtual void show(){
printf("A");
}
virtual std::unique_ptr<A> clone() = 0;
private:
string tokenS;
};
class B :public A
{
public:
virtual void show(){
printf("B:");
// return 0;
}
virtual std::unique_ptr<A> clone()
{
return std::make_unique<B>(*this);
}
};
class list
{
public:
A& getNode(){
return *pt1;
}
void setNode(A& temp){
pt1 = temp.clone();
}
protected:
private:
std::unique_ptr<A> pt1;
};
int main(){
list ls;
B b1;
ls.setNode(b1);
ls.getNode().show();
}
相关文章:
- 多态性和功能结合
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- C++boost序列化多态性问题
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 如何在多线程中正确使用unique_ptr进行多态性?
- 具有智能指针的多态性
- 在 C++ 中在堆栈上创建实例时如何保持多态性?
- 继承/多态性 - 我是否被迫使用"protected"变量?
- C++ 多态性在代码::块 17.12 中不起作用
- C++ 泛型和多态性:这种模式可行吗?
- 为什么我们实际上需要运行时多态性?
- 如何在这个简单的最小示例中实现多态性?
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 无法初始化已知大小的矢量指针,该大小不会因多态性而更改
- 使用字符串时不能重写多态性
- 如果重载函数仅被部分重写,则多态性不起作用
- 方法重写(没有虚拟方法或指针)是否被认为是多态性的一部分
- C++中的多态性:调用重写的方法
- 多态性和重写C++中类模板中的方法