【发布时间】:2012-03-23 12:14:20
【问题描述】:
我是 C++ 的新手,非常感谢任何和所有帮助。我有这个与类和继承有关的任务。我的理解是,我可以在基类中编写一个虚函数,该虚函数会被继承类中的同名函数覆盖。当我调用任何继承的类时,这工作得很好,但是当我将它们插入一个编写为接收基类的函数时,即使它接收的对象来自继承的类,它也会从继承的类调用初始化程序,但其他仅来自基类的函数。这是我的代码的缩短版本:
基类:
#ifndef PLAYER_CPP
#define PLAYER_CPP
class Player
{
protected:
string playerThrow;
public:
//function that sets player throw
void virtual setMove();
string performMove() {return(playerThrow);}
};
#endif
继承类:
class Avalanche: virtual public Player
{
public:
Avalanche();
//set specific move for class
void setMove()
{
//always plays rock
playerThrow = "rock";
}
};
//initializer, inherit from player, set new name
Avalanche::Avalanche() : Player()
{
//initialize name string
string newName;
//set name
newName = "Avalanche Player";
//sets name in player class
name = newName;
}
我是如何尝试使用它的:
class Tournament
{
public:
Tournament();
Player bout(Player, Player);
Player Tournament::bout (Player p1, Player p2)
{
p1.setMove();
p2.setMove();
return p1;
}
};
最终的结果是将移动设置为空,而不是“摇滚”。
在此先感谢您提供正确方向的任何指示。这个让我很困惑。
-维多利亚
【问题讨论】:
-
为什么要使用虚拟继承?我看不到任何需要虚拟继承
-
bout的定义应该在类之外。符合标准的编译器将拒绝此实现。
标签: c++ inheritance polymorphism