#include <iostream>
using namespace std;
class A{
protected:
int a;
public:
A(){
cout<<"A()"<<endl;
}
A(int _a):a(_a){
cout<<"A()"<<endl;
}
~A(){
cout<<"~A()"<<endl;
}
//虚函数
virtual void print(){
cout<<"print()"<<endl;
cout<<a<<endl;
}
//不是虚函数 但是同名
void print2(){
cout<<"print2()"<<endl;
cout<<a<<endl;
}
};
class B:public A
{
public:
B(int _a,int _b):A(_a),b(_b){
cout<<"B()"<<endl;
}
~B(){
cout<<"~B()"<<endl;
}
//重写虚函数
virtual void print(){
cout<<"print()"<<endl;
cout<<a<<endl;
cout<<b<<endl;
}
void print2(){
cout<<"print2()"<<endl;
cout<<a<<endl;
cout<<b<<endl;
}
private:
int b;
};
//基类对象作为参数
void func2(A p){
p.print();
p.print2();
}
//基类对象引用作为参数
void func(A& p){
p.print();
p.print2();
}
//基类对象指针作为参数
void fun(A* p){
p->print();
p->print2();
}
void main(){
{
B b(1,2);
A a;
a=b;//派生类对基类对象直接赋值
//a.print();
//b.print();
//b=a;父类不能赋值给子类
A &y=b; //派生类对基类对象的引用 赋值
//y.print(); //调用子类虚函数
//y.print2();//调用父类同名函数
A*p;
p=&a;
//fun(p);
p=&b; //派生类对象的地址可以赋给基类的指针
//fun(p);
//func(a);
//func(b);//函数形参是基类\引用,调用时候可以传递派生类对象
func2(b);
}
system("pause");
}
基类派生类类型转换以及虚函数
最新推荐文章于 2023-05-15 15:59:30 发布
本文通过C++代码示例,详细介绍了基类与派生类中虚函数的重写过程,以及如何通过基类引用调用派生类的虚函数。同时,展示了在C++中如何实现多态性,并解释了基类与派生类对象之间的赋值与传递。
494

被折叠的 条评论
为什么被折叠?



