【发布时间】:2012-08-20 18:28:13
【问题描述】:
我在使用 C++ 进行类转换时遇到了一些问题。
为了学习,我想创建一个只进行运算的类,比如求和,但每次启动它似乎都会崩溃。
这是我的简单课程:
#include <iostream>
class CCalculation {
public:
CCalculation() {};
virtual int calculate() = 0;
};
class CCalc_CONST : public CCalculation {
int x;
public:
CCalc_CONST(int a) : x(a) {};
int calculate() { return x; };
};
class CCalc_ADD : public CCalculation {
CCalculation *x;
CCalculation *y;
public:
CCalc_ADD(CCalculation *a, CCalculation *b) {
this->x = a;
this->y = b;
};
int calculate() {
std::cout << "Calculation...\n";
return x->calculate() + y->calculate();
};
};
我的测试:
CCalculation *a = &CCalc_CONST(4);
CCalculation *b = &CCalc_CONST(1);
CCalculation *c = &CCalc_ADD(a,b);
std::cout << "res: " << c->calculate() << "\n";
似乎每次都崩溃(我没有收到编译器错误或警告)。 我发现运行它的唯一方法是在 CCalc_ADD 构造中打印 a->calculate 和 b->calculate 时。我完全不知道为什么我需要调用计算函数才能使其工作。
有人可以向我解释一下具体怎么做吗?
【问题讨论】:
-
指针越少越好。并且编译器应该警告您获取临时地址。它们不会停留足够长的时间让您使用它们。
标签: c++ class inheritance casting parent-child