没有创建基类的对象时如何访问虚函数内容[关闭]
Posted
技术标签:
【中文标题】没有创建基类的对象时如何访问虚函数内容[关闭]【英文标题】:How to access vitual function's content when no object of the base class is made [closed] 【发布时间】:2013-12-22 19:39:31 【问题描述】:我这里有一段代码实现了多态性。我想在不影响我之前的输出的情况下访问虚函数的内容。
谁能帮我解决这个问题?
class parent
private:
int m,n;
public:
parent(int x,int y): m(x),n(y)
cout<<"parent constructor called";
virtual void display()
cout<<"\n"<<m<<"\t"<<n;
cout<<"\nParent display called";
;
class child: public parent
private:
int a,b;
public:
child(int x,int y, int c, int d): parent(x,y),a(c), b(d)
cout<<"\nchild constructor called";
void display()
cout<<"\n"<<a<<"\t"<<b;
cout<<"\nChild display called";
;
int main()
child c(4,5,6,7);
parent *p=&c;
p->display();
getch();
【问题讨论】:
"访问虚函数的内容,不影响我之前的输出。" ?你的“以前的输出”是什么? “虚函数的内容”是什么意思? 不清楚你在问什么。你的程序做什么,你期望它做什么,它们有什么不同? 我的意思是父类的虚拟功能。我宝贵的输出是:父构造函数调用子构造函数调用6 7子显示调用 【参考方案1】:我认为你的意思是以下
void display()
parent::display();
cout<<"\n"<<a<<"\t"<<b;
cout<<"\nChild display called";
【讨论】:
我想访问 virtual void display() cout 在这种情况下,每次调用 child 的 display() 时,也会调用 parent 的 display()。我想要独立调用uding的多态性概念 我不明白你想要什么。只需在子类中重新定义函数即可。【参考方案2】:你可以直接从指向基类的指针来做
int main()
child c(4,5,6,7);
parent *p=&c;
p->parent::display();
p->display();
getch();
【讨论】:
有没有不使用范围解析的访问方式?? 通过指针指向基类而不进行强制转换是我知道的唯一方法【参考方案3】:作为附加说明。不要公开虚函数, 将它们设为私有并使用公共的非虚拟函数:
class parent
public:
void display()
cout<<"\n"<<m<<"\t"<<n;
cout<<"\nParent display called";
this->doDisplay();
private:
virtual void doDisplay()
;
class child : public parent
private:
void doDisplay() override
//No need to call parent::display anymore
//...
;
这样就不会忘记拨打parent::display
。将避免错误。
【讨论】:
以上是关于没有创建基类的对象时如何访问虚函数内容[关闭]的主要内容,如果未能解决你的问题,请参考以下文章