C++纯虚函数
纯虚函数语法
virtual type functionname()=0;
virtual声明的方法后加上=0是纯虚函数
Java Interface接口
Java 中使用Interface开放接口,让另一个类implements interface来达到逻辑和接口分离的作用
Java Interface接口
C++实现接口
利用两个特性
1. 纯虚函数必须被派生类实现
2. C++向上造型
抽象类相当于Java的Interface
Java:
public interface api {
void onCall();
}
C++:
class api {
public:
void onCall() = 0;
}
派生类相当于Java的implements
Java:
public class apiCtx extends api {
void onCall() {
xxx
}
}
C++:
class apiCtx : public api {
public:
void onCall() {
xxx
}
}
通常在逻辑处理的class中会把接口实现类当作参数传入
Java: demo实现接口 ctx完成逻辑处理 调用时把demo传递给ctx
class demo implements ctx.api {
public:
void onCall() {
xxx
}
}
class ctx {
private api api_;
public interface api {
void onCall();
}
public void call(api api) {
api_ = api;
api_.onCall();
}
}
调用: ctx a;
demo b;
a.call(b);
C++: 抽象类api作为接口 派生类apiCtx和apiChild实现接口
Content完成逻辑 调用时传入派生类决定调用的接口
#include <iostream>
#include <vector>
#include <map>
#include <stdlib.h>
#include "inc.h"
using namespace std;
class api {
public:
virtual void onCall() = 0;
};
class apiCtx : public api{
public:
void onCall() {
printf("apiCtx.onCall\n");
}
};
class apiChild : public api {
public:
void onCall() {
printf("apiChild.onCall\n");
}
};
class Content {
public:
void onExec(api *api) {
api_ = api;
api_->onCall();
}
private:
api *api_;
};
int main(void)
{
Content ctx;
apiCtx a;
apiChild b;
ctx.onExec(&a);
ctx.onExec(&b);
getchar();
return 0;
}
总结
OOP语言似乎都有些共通的地方 一些特性都能用不同的方式实现
接下来实践中多把握这一点