注册 登录
编程论坛 C++教室

关于虚函数的问题,结果为什么不一样呢

炼雪无痕 发布于 2012-07-20 08:18, 805 次点击
#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(){ //main2
   
    A a;
   
    B b;
   
    A* p1=&a;
   
    A* p2=&b;
   
    p1->print();
   
    p2->print();
   
}
13 回复
#2
rjsp2012-07-20 11:04
没看到 虚函数
#3
peach54602012-07-20 12:32
虚函数在哪?
#4
pangding2012-07-20 21:28
楼主还不如就直接问“为什么结果不一样”。搞的现在都没人回答了……
#5
小糊涂神c302012-07-20 21:46
我也想知道答案,谁能讲解一下,如果讲解的好的话,我另开贴给他加20分!
求知中···  谢谢!
#6
小糊涂神c302012-07-20 21:48
等待答案,答的好的话我另开帖再给他加20分!
求知中···
#7
pangding2012-07-20 21:58
我觉得随便找个讲语法的书翻到讲继承呀多态的那几章都会讲这个问题。而且有兴趣你还可以把这个函数改成虚函数,看看是什么效果。有兴趣的话,自己在网上查查资料也就是一会的事就搞明白了。而且想给谁加分,在这个帖子里给他们加就是了。
#8
炼雪无痕2012-07-21 10:40
回复 4楼 pangding
是没有虚函数,结果为什么不一样啊????
#9
liudw22012-07-21 10:51
虚函数不是要在基类声明virtual的吗?楼主根本就没有声明,何来虚函数啊
#10
半年换半生2012-07-23 14:07
对这个问题,只能说这是静态绑定
#11
我乃新手2012-07-23 23:33
第二个main函数你要把基类的函数声明为虚函数,这样它才会调用子类的函数!
#12
我乃新手2012-07-23 23:35
#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();
   
}
#13
liudw22012-07-26 21:20
回复 8楼 炼雪无痕
A* p2=&b; 你看看这个指针的是A类型的啊。。。看清楚,所以才不同,改成B p2=&b;就相同了
#14
liudw22012-07-26 21:29
回复 楼主 炼雪无痕
#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()
}
1