我对C++非常陌生,非常感谢任何和所有的帮助。我有这个任务可以玩类和继承。我的理解是,我可以在基类中编写一个虚拟函数,它被继承类中的相同名称的函数覆盖。当我调用任何继承类时,这种方法很好,但是当我将它们插入一个写入基类的函数中时,即使它接收的对象来自继承类,它也会从继承类调用初始化器,但其他只能从基类中运行。这里是我的代码缩短版本: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;
}
};
什么这样做的结果是将这一举措设置为无效,而不是“摇摆”。
预先感谢任何正确方向的指针。这个让我难住。
-Victoria
参见:http://stackoverflow.com/questions/274626/what-is-the-slicing -problem-in-c – Mankarse 2012-03-23 12:17:22
为什么使用虚拟测试?我看不到虚拟继承的任何需要 – softghost 2012-03-23 12:49:18
'bout'的定义应该在类之外。符合编译器会拒绝这个实现。 – 2012-03-23 15:36:41