C++ 在实现的纯虚拟方法中自动从父抽象 class 调用检查方法?
C++ Automatically call check methods from parent abstract class in implemented pure virtual methods?
我在 C++ 中有这个摘要 class:
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
派生的每个 class 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
派生的每个 class 都以这种方式开始实施 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;
};
我在 C++ 中有这个摘要 class:
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
派生的每个 class 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
派生的每个 class 都以这种方式开始实施 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;
};