在 C++ 中将派生类对象分配和访问到基类“指向指针”对象
Posted
技术标签:
【中文标题】在 C++ 中将派生类对象分配和访问到基类“指向指针”对象【英文标题】:Assigning and Accesing derived class object to base class "pointer to pointer" object in C++ 【发布时间】:2017-03-24 06:07:00 【问题描述】:我对 c++ 非常陌生。我有这样的情况:我有一个包含两个虚函数的基类(不纯)。我有这个类的派生类,我在其中实现了这些虚函数。现在在我的 main() 函数中,我创建了一个指向指向基类的指针对象的指针。现在使用这个对象如何访问派生类对象和函数。
我只想使用指向基类指针对象的指针来访问派生类对象。
基类:
class another
public:
virtual void setName();
virtual string getName();
;
派生类
class use: public another
public:
string str;
void setName()
str = "USE CLASS";
string getName()
return str;
;
我的 main() 函数:
int main()
another **an;
*an = new use();
an->setName(); //getting error
cout<<an->getName()<<endl; //getting error
return 0;
【问题讨论】:
【参考方案1】:*an = new use();
指针an
未初始化,无法取消引用。在这里使用双指针(指向指针的指针)没有实际意义。在这种情况下,tit 所做的只是为代码添加另一个级别的引用。取消引用此类指针的表达式导致指向“另一个”类的指针的值,存储在哪里?你从来没有创建过那个存储,所以这样的操作是一个 UB。
代码的合法变体:
int main()
another **an = new another*(); // creating storage for pointer
*an = new use();
(*an)->setName();
cout<<(*an)->getName()<<endl;
delete *an; // don't rely on OS to do so.
delete an;
return 0;
int main()
another **an = new another*(new use()); // doing this in one line
// storage of *an would be value-initialized by value returned
// from 'new use()' instead of default initialization
(*an)->setName();
cout<<(*an)->getName()<<endl;
delete *an; // don't rely on OS to do so.
delete an;
return 0;
int main()
another *an = new use();
// We don't need another pointer~ use an reference where required?
an->setName();
cout<<an->getName()<<endl;
delete an; // don't rely on OS to do so.
return 0;
PS。这个another
类的声明在技术上是错误的,我可以假设你已经跳过了getName 的主体。它应该导致有关函数缺少返回值的编译时错误。如果another
本身是不可用的类,则可以将方法声明为纯方法
class another
public:
virtual void setName() = 0;
virtual string getName() = 0;
;
无法创建此类或未覆盖这些方法的派生类的实例,但它提供了您正在研究的“样板”机制。
【讨论】:
优秀。谢谢老哥【参考方案2】:an
是指向another
的指针。 *an
返回指向 another
的指针。所以你想要(*an)->setName();
像这样:
int main()
another **an;
*an = new use();
(*an)->setName(); //getting error
cout<<(*an)->getName()<<endl; //getting error
return 0;
【讨论】:
谢谢伙计。但是,当我使用上面提供的相同 main() 函数时,我收到一个错误,比如使用了未初始化的变量“an”。你能告诉我如何初始化它吗?以上是关于在 C++ 中将派生类对象分配和访问到基类“指向指针”对象的主要内容,如果未能解决你的问题,请参考以下文章