让我们假设我有一个接口类(伪造的例子,而不是真正的代码)
template <int year>
class Car {
public:
virtual void move(double x, double y) = 0;
// etc etc
};
Run Code Online (Sandbox Code Playgroud)
和许多派生类一样
template <int year>
class Model8556 : virtual public Car<year> {
private:
void move(double x, double y) {
// ...
}
int yearMax = 2000; // different for every model
int yearMin = 1990;
// etc etc
};
Run Code Online (Sandbox Code Playgroud)
我选择了某个地方的模型
Car<foo>* myCar;
switch (bar) {
case 1: myCar = new model3434<foo>(); break;
case 2: myCar = new model8295<foo>(); break;
// etc …Run Code Online (Sandbox Code Playgroud) 为什么dynamic_cast<new>(old)会变old?
示例代码:
#include <iostream>
#include <string>
class MyInterface {
public:
virtual void say() = 0;
virtual ~MyInterface() { }
};
class SubInterface : public MyInterface {
public:
std::string test = "test";
virtual void say() = 0;
virtual ~SubInterface() { }
};
class Example : public SubInterface {
public:
void say() {
std::cout << test << std::endl;
}
};
int main() {
MyInterface* ex1 = new Example();
SubInterface* ex2 = dynamic_cast<SubInterface*>(ex1);
if (ex2 != nullptr) {
std::cout …Run Code Online (Sandbox Code Playgroud)