这两种输出结果是怎么来的?
两个代码类似的抽象类,两种不同的输出结果。搞不清是怎么来的:
#include <iostream.h>
class A{
public:
virtual void printMe(){cout<< "This is class A printing. "<<endl;};
} ;
class B:public A{
public:
void printMe() {cout << "This is class B printing. "<<endl;}
} ;
class C:public B{
public:
void printMe() {cout <<"This is class C printing. "<<endl;}
} ;
void print(A a)
{
a.printMe();
}
void main()
{
B b;
C c;
print(b);
print(c);
}
输出结果为:
This is class A printing.
This is class A printing.
#include <iostream.h>
class A{
public:
virtual void printMe()=0;
} ;
class B:public A{
public:
void printMe() {cout << "This is class B printing. "<<endl;}
} ;
class C:public B{
public:
void printMe() {cout <<"This is class C printing. "<<endl;}
} ;
void print(A&a)
{
a.printMe();
}
void main()
{
B b;
C c;
print(b);
print(c);
}
输出结果为:
This is class B printing.
This is class C printing.
请问程序是怎么执行的?而且也搞不清楚对象void print(A a)和引用void print(A&a)是如何调用print(b);print(c);的。
初学者,请高手指点!
[解决办法]
c++的多态需要引用或指针类型实现,如果是一个对象的实体,就没有什么多态可言了
[解决办法]
第一个程序传值的方式:
print(b);是怎样调用print(A a)的?
1.创建一个新实例
A a;
2.通过强制类型转换赋值
a = (A)b;
3.调用函数
print(a);
你都没有定义void print(B b)这个函数,怎么可能期望有这个函数被执行
[解决办法]
你传指针或者传引用就是调用b.printMe(), 传值会自动创建新的实例,而新实例在函数参数中定义是A类型的,所以调用a.printMe()
[解决办法]
建议楼主先理解一下虚汗数继承和虚函数表的相关知识。
然后再看引用void print(A&a)就比较容易理解。
而print(A a)就是个局部变量,所以print(b);
print(c)实际没传进参数。
[解决办法]
一个是值传递,一个是引用传递。一个传递参数的赋值,一个传递参数的地址