标题:关于虚函数的问题,结果为什么不一样呢
只看楼主
我乃新手
Rank: 2
等 级:论坛游民
帖 子:52
专家分:73
注 册:2012-7-23
得分:0 
第二个main函数你要把基类的函数声明为虚函数,这样它才会调用子类的函数!
2012-07-23 23:33
我乃新手
Rank: 2
等 级:论坛游民
帖 子:52
专家分:73
注 册:2012-7-23
得分:0 
#include<iostream>
using namespace std;
class A{

public:

virtual void print()//这里要加上virtual,说明是虚函数
{ cout<<"This is A"<<endl;}

};

class B:public A{

public:

void print()
{ cout<<"This is B"<<endl;}

};
int main(){     
    A a;
   
    B b;
   
    A* p1=&a;
   
    A* p2=&b;
   
    p1->print();
   
    p2->print();
   
}
2012-07-23 23:35
liudw2
Rank: 4
等 级:业余侠客
帖 子:85
专家分:248
注 册:2011-7-31
得分:0 
回复 8楼 炼雪无痕
A* p2=&b; 你看看这个指针的是A类型的啊。。。看清楚,所以才不同,改成B p2=&b;就相同了
2012-07-26 21:20
liudw2
Rank: 4
等 级:业余侠客
帖 子:85
专家分:248
注 册:2011-7-31
得分:0 
回复 楼主 炼雪无痕
#include<iostream>
using namespace std;
class A{
public:
void print(){
  cout<<"This is A"<<endl;}
};

class B:public A{
public:
void print(){
  cout<<"This is B"<<endl;}
};

/*int main(){ //为了在以后便于区分,我这段main()代码叫做main1
A a;
B b;
a.print();
b.print();
}*/

int main(){   
    A a;
    B b;
    A* p1=&a;
    A* p2=&b; //这里由于没有在基类设虚函数,指针是指向A类型的参数
    p1->print();
    p2->print(); //所以这里就会指向A类的成员函数printed()
}
2012-07-26 21:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-373742-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.147590 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved