use*_*719 2 c++ inheritance constructor pointers
我的两个类: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) );
Run Code Online (Sandbox Code Playgroud)
将Child*ptr对象作为Parent*ptr对象传递是否合法?我听说他们有相同的指针类型,所以应该没问题.那么为什么我会收到警告:未使用的变量'ptr'警告:未使用的变量'ptr'错误:'ptr'未在此范围内声明?我的程序只适用于Parent类.我觉得我没有继承父权.
代码创建了两个独立的变量ptr
,两者的范围非常有限.
考虑以下:
if(val[0] == 0)
Child* ptr = new Child(nam, val);
else
Parent* ptr = new Parent(nam, val);
Run Code Online (Sandbox Code Playgroud)
它相当于:
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
Run Code Online (Sandbox Code Playgroud)
以下是修复代码的一种方法:
Parent* ptr;
if(val[0] == 0)
ptr = new Child(nam, val);
else
ptr = new Parent(nam, val);
Run Code Online (Sandbox Code Playgroud)
执行此操作后,还需要确保Parent
具有虚拟析构函数.请参阅何时使用虚拟析构函数?