使用字符串时多态性无法覆盖
Polymorphism can't override when using string
Polymorphism
在 dec C 中,不适用于字符串
我正在使用Dev C++ 5.9.2.
我有一个 parent class A
, class B,C,D,E
.....extends A
和 class list
是我使用 B,C,D.
的主要 class
我不使用 parent 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();
}
if i using string tokenS
result :A
if i using char* tokenS
result :B:
我不明白,如果我创建class并使用它,我有同样的错误
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();
}
Polymorphism
在 dec C 中,不适用于字符串
我正在使用Dev C++ 5.9.2.
我有一个 parent class A
, class B,C,D,E
.....extends A
和 class list
是我使用 B,C,D.
我不使用 parent 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();
}
if i using
string tokenS
result :Aif i using
char* tokenS
result :B:
我不明白,如果我创建class并使用它,我有同样的错误
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();
}