c++ - 从基类覆盖虚方法

标签 c++ inheritance pure-virtual

我正在用 Visual C++ 2010 编写一个小程序。当有问题的类被分为 * 时,我在实现纯虚函数时遇到了一些问题,这些函数继承自某个抽象类。 h*.cpp 文件。

这是我声明类和方法的 Sir.h 文件,Sir 是一个基类:

class Sir{
protected : Uint _count; 
            TVint _elemente; 

public : Sir();
         virtual ~Sir(){}
         Uint operator[] (int index);
         Sir& operator() (int index);
         friend ostream& operator << (ostream &out, const Sir &sir);
        
protected : virtual void CalculateValues(int index)=0;
}
class Fibonacci:public Sir{
enum { MAX_FIB = 47 };

using Sir::CalculateValues;
void CalculateValues(int index);
}

这是 Sir.cpp :

 #include "Sir.h"
        
    Sir::Sir(){_count=0;}
        
    Uint Sir::operator[](int index)
                 {
                        if(index<0)
                            ParameterOutOfBounds();
                        else{_count=index+1;}
                        return _elemente[_count];
                 }
    Sir& Sir::operator()(int index){operator[] (index);}
        
    void Fibonacci::CalculateValues(int index){
            
            if(index<Fibonacci::MAX_FIB)
            {Fibonacci::_elemente.push_back(1);
             Fibonacci::_elemente.push_back(1);
             while(_elemente.size()<_count)
            Fibonacci::_elemente.push_back(_elemente[_elemente.size()-1]+_elemente[_elemente.size()-2]);
                }
            else ParameterOutOfBounds();
        
      }
ostream& operator << (ostream &out, const Sir &sir)
       {
          cout<<"Index  Value"<<endl;
          cout<<"--------------------"<<endl;
          for(int i=0;i<_count;i++)
          cout<<i<<"    "<<_elemente[_count]<<endl;
        }

这是 testSir.cpp 文件:

#include "Sir.h";
#include<iostream>;
#include"Calc\Exceptions.h";
using namespace std;

int main(){

     Sir * fib=new Fibonacci;
     fib->CalculateValues(1); //Error : function is inaccessible
     system("PAUSE");
     return 0;
}

我收到错误:错误:函数“Sir::CalculateValues”不可访问。我该如何解决这个问题?

编辑:

protected 是我的错。现在我在 Sir * fib=new Fibonacci; 遇到了另一个问题 我收到“错误:不允许抽象类类型“Fibonacci”的对象”。

最佳答案

该方法不可访问,因为它被声明为 protected

protected : virtual void CalculateValues(int index)=0;

public : 下添加:

public : Sir();
         virtual ~Sir(){}
         Uint operator[] (int index);
         Sir& operator() (int index);
         friend ostream& operator << (ostream &out, const Sir &sir);
         virtual void CalculateValues(int index)=0;

Fibonacci 类也一样(只有相关的方法)

protected 方法只能由声明它的类或它的任何派生类访问

关于c++ - 从基类覆盖虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16497129/

相关文章:

c++ - 大整数隐式截断为无符号类型 [-Woverflow]

c++ - 通过按钮访问父部件的变量

c++ - VS2019 内联函数的一些问题

c++ - 虚函数的开销会随着继承树中类的数量增加而增加吗?

java - 通用接口(interface)实现不起作用

c++ - Boost.Asio 仅作为 header

java - 私有(private)字段和方法可以继承吗?

c++ - 纯虚拟 friend 类

c++ - boost python中使用纯虚函数的多个派生类

c++ - 我对 c++ 纯虚函数和接口(interface)的误解