求助,一个C++虚函数动态联编的问题

#include<iostream>usingnamespacestd;classfather{public:virtualvoidrun()const{cout<<"父... #include <iostream>
using namespace std;
class father
{
public:
virtual void run()const{cout<<"父亲可以跑万米\n";}
};
class son:public father
{
public:
void run()const{cout<<"儿子可以跑十万米\n";}
};
class daughter:public father
{
public:
void run()const{cout<<"女儿可以跑五万米\n";}
};
void one(father);
void two(father*);
void three(father&);
int main()
{
father*p=0;
int choice;
while (1)
{
bool quit=false;
cout<<"(0)quit (1)son (2)daughter (3)father:";
cin>>choice;
switch (choice)
{
case 0:quit=true;
break;
case 1:p=new son;
one(*p);
break;
case 2:p=new daughter;
two(p);
break;
case 3:p=new father;
three(*p);
break;
default:cout<<"请输入0到3之间的数字\n";
break;
}
if (quit)
{
break;
}
}
return 0;
}
void one(father one)
{
one.run();
}
void two(father*two)
{
two->run();
}
void three(father&three)
{
three.run();
}

在switch语句中,在调用one、two、three三个函数时,为什么用的分别是*p,p和*p?
我是个刚学C++的新手,麻烦讲的通俗些详细些,谢谢了~
展开
 我来答
徐徐随风倒
2013-03-21 · 超过57用户采纳过TA的回答
知道小有建树答主
回答量:120
采纳率:100%
帮助的人:157万
展开全部
具体传什么 我们要看参数的具体类型还要我们要传的数据类型

首先one 函数 参数定义的为 father one 我们定义的p 为指针father*p=0; 那么我们只有在指针前面加上一个* 号才能传过去合法的值 所以 我们one 函数 传 *p

two 函数 参数定义的为 father*two 很明显我们定义的p 就是指向一个father 对象的指针,所以这里我们传 p

three 函数,参数定义的为father&three 这是一个对象的值引用,怎么才能取到p指针所指向的值呢 和 第一个一样 加一个* 即可,所以这里也传 *p

可以给你举个例子
void Test1(int *){} 对应你的 void two(father*two)

void Test2(int){} void one(father one)

void Test(int&){} void three(father&three)

void main()
{
int *p = new int; 这句你懂吧 定义一个int 型指针p 并分配空间

*p = 5;

Test1(p);

Test2(*p);

Test3(*p);
}
当调用 Test1 时候 参数为指针类 所以我们传指针 p 即 Test1(p)
当调用 Test2 时候 参数为类型 所以我们传指针所在地址的类型 *p 即 Test2(*p)
当调用 Test3 时候 参数为引用且为值类型 所以我们传指针所在地址的类型 *p当做引用对象 即 Test2(*p)

理解了上面的那个小例子相信你能很快明白你所说的三个地方疑问了。。呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式