【发布时间】:2011-12-17 06:46:23
【问题描述】:
我有一个没有默认构造函数或赋值运算符的类,因此它根据另一个函数的结果在 if/else 语句中声明和初始化。但是后来它说它超出了范围,即使条件的两个路由都会创建一个实例。
考虑以下示例(使用int 完成只是为了说明这一点):
#include <iostream>
int main()
{
if(1) {
int i = 5;
} else {
int i = 0;
}
std::cout << i << std::endl;
return 0;
}
条件语句中声明的变量是否在条件语句末尾超出范围?没有默认构造函数但构造函数的参数取决于某些条件的情况的正确处理方法是什么?
编辑
鉴于给出的答案,情况更加复杂,因此可能需要改变方法。有一个抽象基类 A 和两个派生自 A 的类 B 和 C。这样的事情如何:
if(condition) {
B obj(args);
} else {
C obj(args);
}
改变方法?由于 A 是抽象的,我不能只声明 A* obj 并使用 new 创建适当的类型。
【问题讨论】:
-
你的继承是虚拟的还是静态的?
-
虚拟的,我想。
class A有一个虚函数,如果这就是你的意思(C++ 不是我的强项,我主要在 Fortran 中工作) -
您实际上可以声明一个指向抽象类的指针 - 我编辑了我的答案。
标签: c++ constructor scope