Rectangle类成 Rectangle:: Rectangle( int avalue, int bVa 员函数的定义 a=avalue: b=bvalue // Rectangle类构造函数 double rectangle: getAreao const cout<" Rectangle类的 getArea函数,面积是" return a b // Rectangle类 getArea函数定 义 void Rectangle:: printoconst cout hight is a cout<< width is"<<b<<end1 // Rectangle类 print I函数定 义 2005-4-28 北京邮电大学电信工程学院计算机技术中心
2005-4-28 北京邮电大学电信工程学院计算机技术中心 -16- Rectangle::Rectangle( int aValue, int bValue ) { a=aValue; b=bValue; } // Rectangle类构造函数 double Rectangle::getArea() const { cout<<"Rectangle类的getArea函数,面积是 "; return a * b; } // Rectangle类getArea函数定 义 void Rectangle::print() const { cout << "hight is "<<a; cout<<"width is"<<b<<endl; } // Rectangle类 print函数定 义 Rectangle类成 员函数的定义
例11.1的主函数 //例11.1:111.cpp 调用的是 #include < iostream> 数,而是584845 using std:: cout 用的是 Ractangle类的 using std: endl petare函数,面积是100 #include shape. h /包含头文件 void maino Circle circle( 22, 8, 3.5) ∥创建 Circle类对象 Rectangle rectangle( 10, 10 //创建 Rectangle类 对象 cout<<"调用的是 cout< circle. getArea0<<endl;/静态联编 cout<<"调用的是"; cout< rectangle. getArea0<<endl;//静态联编 /结束main函数 2005-4-28 北京邮电大学电信工程学院计算机技术中心
2005-4-28 北京邮电大学电信工程学院计算机技术中心 -17- // 例11.1: 11_1.cpp #include <iostream> using std::cout; using std::endl; #include "shape.h" // 包含头文件 void main() { Circle circle( 22, 8, 3.5 ); // 创建Circle类对象 Rectangle rectangle( 10, 10 ); // 创 建 Rectangle 类 对象 cout << "调用的是 "; cout<<circle.getArea() << endl; // 静态联编 cout << "调用的是"; cout<<rectangle.getArea() << endl; // 静态联编 } // 结束main函数 例11.1的主函数 调用的是Circle类的getarea函 数,面积是38.4845 调用的是Ractangle类的 getarea函数,面积是100
1121派生类对象调用同名函数 ◆对于派生类对象调用成员函数,可以有以下的 结论: ◆派生类对象可以直接调用本类中与基类成员函 数同名的函数,不存在二义性; ◆在编译时就能确定对象将调用哪个函数,属于 静态联编,不属于运行时的多态 2005-4-28 北京邮电大学电信工程学院计算机技术中心 18
2005-4-28 北京邮电大学电信工程学院计算机技术中心 -18- 11.2.1派生类对象调用同名函数 对于派生类对象调用成员函数,可以有以下的 结论: 派生类对象可以直接调用本类中与基类成员函 数同名的函数,不存在二义性; 在编译时就能确定对象将调用哪个函数,属于 静态联编,不属于运行时的多态
1122通过基类指针调用同名函数 ◆从继承的角度来看,派生类对象是基类对象的 一个具体的特例。或者说,派生类对象是某 种特定类型的基类对象 例如, Circles类是 Shape类的公有继承,“圆”是“图 形”的一种特例。或者说,圆是一种特定的图形, 具有图形的基本特征 ◆但是,这种关系不是可逆的。不可以说基类的 对象具有派生类对象的特征,基类对象也不是 派生类对象的一个特例。 2005-4-28 北京邮电大学电信工程学院计算机技术中心
2005-4-28 北京邮电大学电信工程学院计算机技术中心 -19- 11.2.2通过基类指针调用同名函数 从继承的角度来看,派生类对象是基类对象的 一个具体的特例。或者说,派生类对象是某一 种特定类型的基类对象。 例如,Circle类是Shape类的公有继承,“圆”是“图 形”的一种特例。或者说,圆是一种特定的图形, 具有图形的基本特征。 但是,这种关系不是可逆的。不可以说基类的 对象具有派生类对象的特征,基类对象也不是 派生类对象的一个特例
1122通过基类指针调用同名函数 ◆在关于基类对象和派生类对象的操作上,可以 允许以下的操作: 派生类对象可以赋值给基类对象; 派生类对象的地址可以赋值给基类对象的指针。或 者说,可以用派生类对象的地址初始化基类对象的 指针; 可以将基类对象的引用,定义为派生类对象的别 名,或者说,用派生类对象初始化基类的引用 通过派生类对象的地址初始化的基类对象的指针, 可以访问基类的公有成员,也可以访问和基类成员 函数同名的函数 2005-4-28 北京邮电大学电信工程学院计算机技术中心
2005-4-28 北京邮电大学电信工程学院计算机技术中心 -20- 11.2.2通过基类指针调用同名函数 在关于基类对象和派生类对象的操作上,可以 允许以下的操作: 派生类对象可以赋值给基类对象; 派生类对象的地址可以赋值给基类对象的指针。或 者说,可以用派生类对象的地址初始化基类对象的 指针; 可以将基类对象的引用,定义为派生类对象的别 名,或者说,用派生类对象初始化基类的引用。 通过派生类对象的地址初始化的基类对象的指针, 可以访问基类的公有成员,也可以访问和基类成员 函数同名的函数