#include "Father.h"
class Dugter :public Father
{
public:
Dugter();
~Dugter();
void aa();
private:
};
void Dugter::aa(){
cout << "女儿" << endl;
}
Dugter::Dugter()
{
age = 11;
}
Dugter::~Dugter()
{
}
class Son:public Father
{
public:
int classid;
Son();
~Son();
void aa();
void getclassid() {
cout << "classid";
}
private:
};
void Son::aa() {
cout << "儿子";
}
Son::Son()
{
age = 15;
}
Son::~Son()
{
}
class Father
{
public:
int age;
int money;
Father();
~Father();
void aa() ;
private:
};
void Father::aa() {
cout << "father";
}
Father::Father()
{
age = 50;//cout << "dd" << endl;
}
Father::~Father()
{
//cout << "vv" << endl;
}
void test(const Father& fa);//引用
void test(const Father* fa);//指针
int main() {
Son ab= Son();
cout <<"ab adress: " << &ab << endl;
test(ab);
Dugter ac = Dugter();
cout <<"ac adress: " << &ac << endl;
test(ac);
}
void test(const Father& fa) {
cout << fa.age << endl;
cout << &fa<<endl;
}
void test(const Father*fa) {
cout << (*fa).age << endl;
cout << fa<<endl;
}
在指针和引用的2种情况下,ab,ab1与fa的地址是相同的,ac,ac1与fa的地址是相同的。
说明向上转型后父类指针指的还是子类的对象。
如果没有向上转型的话,当我们有非常多的子类时,就会重载很多的函数,达不到代码简洁和好维护的目的。
当只接受父类引用时,比如复制构造 函数。这种情况下,需要向上转换。
Father fa = ab;
cout << fa.age << endl;