Presentation is loading. Please wait.

Presentation is loading. Please wait.

C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.

Similar presentations


Presentation on theme: "C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计."— Presentation transcript:

1 C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计

2 “ 目录 C++语言程序设计 基本知识 编程技能 刨根问底 继承的概念 基类和派生类 派生类的构造和析构 同名覆盖与重载
多继承 同名覆盖与重载 转换与继承 在主函数中增加调试信息 C++语言程序设计

3 刨根问底 c C++语言程序设计

4 (I)同名覆盖与重载 Override与Overload:前者是“同名覆盖”,在类继承中才会出现;后者是“重载”,在同一作用域范围内,由参数个数或类型不同的多个同名函数构成,可以单独出现,也可以与Override现象同时出现。 一般来说,同名覆盖现象中的多个函数原型(函数类型、名字、参数)是相同的,而重载现象中的多个函数原型(参数)是不同的。 void func() {cout<<"deriver::func()"<<endl;} void func(int x) {cout<<"deriver::func("<<x<<")"<<endl;} 13.}; 14.int main(){ base m_base; deriver m_deriver; m_base.func(); m_deriver.func(); m_deriver.func(10); return 0; 21.} 1.//例8-7,包含1个文件: Main07.cpp 2.//Main07.cpp 3.#include <iostream> 4.using namespace std; 5.class base{ 6.public: 7. void func() {cout<<"base::func()"<<endl;} 8.}; 9.class deriver:public base{ 10.public: 第11行与第12行代码函数名相同而参数不同,形成了重载;第7行与第11行的函数原型相同但是分别处于基类与派生类中,构成了同名覆盖。 C++语言程序设计

5 (II)转换与继承 每个派生类对象包含一个基类部分,这意味着可以像使用基类对象一样在派生类对象上执行基类的操作,这就涉及派生类基类的转换。该转换包括以下3种情况。 派生类对象转换为基类对象。 用派生类对象给基类对象赋值 基类对象指针指向派生类对象。 用派生类对象初始化基类对象的引用。 C++语言程序设计

6 #include <iostream> using namespace std; class TShape {
派生类对象转换为基类对象 #include <iostream> using namespace std; class TShape { protected: int x, y; public: TShape(int mx=0, int my=0) { x=mx; y=my; } void Show() {cout<<"x="<<x<<"\t y="<<y;} }; class TCircle : public TShape { protected: int r; public: TCircle(int mx=0, int my=0, int mr=1): TShape(mx, my) { r = mr; } void Show() {TShape::Show();cout<<"\tr="<<r; } };

7 // s = static_cast<TShape>(c); cout<<"s=c\t\t";
派生类对象转换为基类对象 s = c; //用派生类对象为基类对象赋值 // s = static_cast<TShape>(c); cout<<"s=c\t\t"; s.Show(); cout<<endl; return 0; } int main(){ TShape s; TCircle c(1,2,3); cout<<"TShape s\t"; s.Show(); cout<<endl; cout<<"TCircle c\t"; c.Show(); cout<<endl;

8 class TCircle : public TShape { protected: int r; public:
基类对象指针指向派生类对象 class TCircle : public TShape { protected: int r; public: TCircle(int mx=0, int my=0, int mr=1): TShape(mx, my) { r = mr; } void Show() {TShape::Show();cout<<"\tr="<<r; } }; #include <iostream> using namespace std; class TShape { protected: int x, y; public: TShape(int mx=0, int my=0) { x=mx; y=my; } void Show() {cout<<"x="<<x<<"\t y="<<y;} };

9 TShape* ps = dynamic_cast<TShape*>(&c); //基类对象指针 指向派生类对象
基类对象指针指向派生类对象 TShape* ps = dynamic_cast<TShape*>(&c); //基类对象指针 指向派生类对象 if(0!=ps) { cout<<"ps=&c\t\t"; ps->Show(); cout<<endl; } return 0; int main(){ TCircle c(1,2,3); cout<<"TCircle c\t"; c.Show(); cout<<endl; //TShape* ps = &c;

10 (II)转换与继承 基类到派生类的转换 C++编译器可以自动将派生类对象转换为基类对象(隐式类型转换) 从基类到派生类不存在转换
//以下代码仅为示例 TShape s; TCircle c = s; //错误!不能将基类转换为派生类 TCircle* pc = &s; //错误!不能将基类转换为派生类 TCircle& rc = s; //错误!不能将基类转换为派生类 C++语言程序设计


Download ppt "C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计."

Similar presentations


Ads by Google