【发布时间】:2021-12-26 12:50:26
【问题描述】:
我有 2 个类,分别是 NumberArray 和 PrimeNumberArray。 PrimeNumberArray 是 NumberArray 的子类 这些类具有生成随机数数组的方法。我在 NumberArray 类中调用这些方法。在主要方法中,我创建 PrimeNumberArray 对象并调用方法“generateAndPrint”,该方法应该调用 PrimeNumberClass 的生成方法,但实际上该方法是从基类工作的。找到素数的生成方法正在工作。我只是想学习如何在基类的方法中调用它。
基类;
class NumberArray{
protected:
int* numbers;
int amount;
public:
NumberArray(int size = 0){
amount = size;
int array[amount];
numbers = array;
}
~NumberArray(){
delete[] numbers;
}
void generateAndPrint(){
generate();
print();
}
private:
void generate(){
int i = 0;
while (i < amount)
{
cout << "a" << endl;
int rnd = (rand() % 1000) +1;
numbers[i] = rnd;
i++;
}
}
void print(){
int i;
for (i = 0; i < amount; i++)
{
cout << numbers[i] << " -> ";
}
cout << endl;
}
};
子类;
class PrimeNumberArray: public NumberArray{
public:
PrimeNumberArray(int size){
amount = size;
int array[amount];
numbers = array;
}
void virtual generate(){
int i = 0;
while (i <amount)
{
int rnd = (rand() % 1000) +1;
int j;
int isPrime = 1;
for(j = 2; j < rnd / 2; j++){
if(rnd % j == 0){
isPrime = 0;
}
}
if(isPrime == 1){
numbers[i] = rnd;
i++;
}
}
}
};
测试类;
int main(){
PrimeNumberArray prime(5);
prime.generateAndPrint();
}
我尝试将 generate 方法设为虚拟,但对我不起作用。
【问题讨论】:
-
“我试图将 generate 方法设为虚拟但对我不起作用。”:为什么它不起作用?您应该在基类的
generate上添加virtual。在派生类中是可选的。 -
@user17732522 谢谢,我只是尝试将子类中的方法设为虚拟。
标签: c++ inheritance overriding encapsulation