繁体   English   中英

C ++在实现的纯虚方法中自动从父抽象类调用检查方法吗?

[英]C++ Automatically call check methods from parent abstract class in implemented pure virtual methods?

我在C ++中有这个抽象类:

class A {
public:
  A(int size);
  virtual void doSomething(int inputSize) = 0;
protected:
  virtual bool checkSize(int inputSize);
private:
  int size;
}

A::A(int size) : size(size){}
bool A::checkSize(int inputSize) { return size == inputSize; }

现在,我要保证的是,对于每个从A doSomething派生的类B ,都是这样开始的:

class B : public A{
  void doSomething(int inputSize);
}

void B::doSomething(int inputSize){
  if(!checkSize(inputSize)){
     std::cerr<<"wrong inputSize!"<<std::endl;
     return;
  }
  //do something...
}

如何保证从A派生的每个类都以这种方式实现doSomething

您将doSomething分为两部分:

class A {
public:
  void doSomething(int inputSize) {
    if (!checkSize(inputSize)){
       std::cerr << "wrong inputSize!" << std::endl;
       return;
    }
    doSomething_(inputSize);
  }
protected:
  virtual void doSomething_(int) = 0;
};

B您仅实现doSomething_

您可以直接在A进行检查,例如:

class A {
public:
    A(int size);
    virtual ~A() = default;

    void doSomething(int inputSize)
    {
        if (!checkSize(inputSize)){
           std::cerr<<"wrong inputSize!"<<std::endl;
           return;
        }
        doSomethingWithChekedSize(inputSize);
    }

protected:
    virtual void doSomethingWithChekedSize(int inputSize) = 0;
    virtual bool checkSize(int inputSize);
private:
    int size;
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM