我可以像父母一样使用继承的类指针吗?

时间:2012-06-10 08:21:34

标签: c++ inheritance pointers constructor

我的两个类:Parent和Child是相同的(现在)并且具有相同的构造函数。

class Parent{
protected:
  string name;
public:
  Parent(string &n, vector <int> &v) {
  /* read n and v into vars */
};

class Child : public Parent {
public:
  Child(string &n, vector <int> &v) : Parent(n, v) {}
};
vector <int> val;
string nam, numb;
if(val[0] == 0) 
  Child* ptr = new Child(nam, val);
else
  Parent* ptr = new Parent(nam, val);

myMap.insert(Maptype::value_type(numb, ptr) );

将Child * ptr对象作为Parent * ptr对象传递是否合法?我听说他们有相同的指针类型,所以应该没问题。那我为什么要来 警告:未使用的变量'ptr' 警告:未使用的变量'ptr' 错误:未在此范围内声明'ptr' ? 我的程序只适用于Parent类。我觉得我没有继承父权。

2 个答案:

答案 0 :(得分:6)

代码创建了两个名为ptr的独立变量,两者的范围非常有限。

请考虑以下事项:

if(val[0] == 0) 
  Child* ptr = new Child(nam, val);
else
  Parent* ptr = new Parent(nam, val);

相当于:

if(val[0] == 0) {
  Child* ptr = new Child(nam, val);
} else {
  Parent* ptr = new Parent(nam, val);
}
// neither of the `ptr' variables is in scope here

以下是修复代码的一种方法:

Parent* ptr;
if(val[0] == 0) 
  ptr = new Child(nam, val);
else
  ptr = new Parent(nam, val);

执行此操作后,还需要确保Parent具有虚拟析构函数。见When to use virtual destructors?

答案 1 :(得分:-1)

因为你只在if语句中声明了ptr,试着在if语句的上方声明它所以它就像aix的回答