小编mst*_*rft的帖子

根据Derived中的值检查Base类的模板参数

让我们假设我有一个接口类(伪造的例子,而不是真正的代码)

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)

c++ inheritance interface

1
推荐指数
1
解决办法
70
查看次数

dynamic_cast 改变原始对象?

为什么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)

c++ inheritance casting

-3
推荐指数
1
解决办法
1068
查看次数

标签 统计

c++ ×2

inheritance ×2

casting ×1

interface ×1