【发布时间】:2010-07-23 19:15:35
【问题描述】:
我正在编写一个可以掷骰子和掷硬币的 C++ 程序。我需要使用继承和多态。我的虚拟功能设置正确。在我的基类(aRandomNumberGenerator)中,我有一个虚函数生成。在 main() 中,我需要一个包含 2 个基类指针的数组,这些指针指向我的派生类(aDie 和 aCoin)。调用 generate() 函数时,如何知道数组中指向的是哪个派生类??
代码:
int main()
{
int n;
int frequency1 = 0; // count of 1s rolled
int frequency2 = 0; // count of 2s rolled
int frequency3 = 0; // count of 3s rolled
int frequency4 = 0; // count of 4s rolled
int frequency5 = 0; // count of 5s rolled
int frequency6 = 0; // count of 6s rolled
int face; // stores most recently rolled value
int numHeads = 0; // count of heads
int numTails = 0; // count of tails
int side; // stores most recently flipped value
cout << "Enter a seed number: "; // promp for user to enter a seed number
cin >> n;
cout << endl;
cout << endl;
aRandomNumberGenerator number(n);
aDie die(n, n);
aCoin coin(n, n);
aRandomNumberGenerator *games[2]; // array of 2 base class pointers
for(int i=0; i <= 2; i++)
games[i]->generate();
// output the seed number entered by the user
cout << "the seed entered is: " << die.inputSeed(n) << endl;
cout << endl;
cout << endl;
// summarize results for 600 flips of a coin
for(int counter2 = 0; counter2 < 600; counter2++)
{
side = generate();
// determine flip value 0/1 and increment appropriate counter
switch ( side )
{
case 0:
++numHeads;
break;
case 1:
++numTails;
break;
default:
cout << "can only be heads or tails";
}
}
// summarize results for 600 rolls of a die
for(int counter1 = 0; counter1 < 600; counter1++)
{
face = generate();
// determine roll value 1-6 and increment appropriate counter
switch ( face )
{
case 1:
++frequency1;
break;
case 2:
++frequency2;
break;
case 3:
++frequency3;
break;
case 4:
++frequency4;
break;
case 5:
++frequency5;
break;
case 6:
++frequency6;
break;
default:
cout << "7 doen't exist on a die!";
}
}
// output results
cout << "Heads: " << numHeads << endl;
cout << "Tails: " << numTails << endl;
cout << "1: " << frequency1 << endl;
cout << "2: " << frequency2 << endl;
cout << "3: " << frequency3 << endl;
cout << "4: " << frequency4 << endl;
cout << "5: " << frequency5 << endl;
cout << "6: " << frequency6 << endl;
cout << endl;
cout << endl;
system ("pause");
return 0;
【问题讨论】:
-
使用多态性的全部意义在于你不必担心类型。
标签: c++ polymorphism