- 1、本文档共35页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
制作时间2013年8月C++程序设计—多态性和虚函数20虚函数的数据封装.ppt
C++程序设计;函数重载
静态关联和动态关联
虚函数
纯虚函数和抽象类
虚析构函数
程序实例;§1 函数重载;多态性的概念;在C++中,多态定义为不同函数的同一接口。函数和操作符的重载也属于多态。
在C++中,允许在同一作用域内的多个函数采用相同的名字,只要使用不同类型、不同数目的参数或不同的返回值,编译器便知道在什么情况下该调用哪个函数,这就叫函数重载。;注意:
(1)作为重载函数至少参数个数或参数类型有所不同。仅返回值类型不同,编译器是无法区别的。
(2)重载函数一般应具有相同的功能,否则会破坏程序的可读性。
(3)重载时使用缺省函数参数要注意二义性。
如: void print(int a,int b);
void print(int a,int b,int c=50);
print(10,100); //调用时将产生二义性,错误!;§2 静态关联与动态关联;#includeiostream.h
class Point
{ public:
Point(double i, double j) {x=i; y=j;}
double Area() const{ return 0.0;}
private:
double x, y;
};
class Rectangle:public Point
{ public:
Rectangle(double i, double j, double k, double l);
double Area() const {return w*h;}
private:
double w,h;
};;Rectangle::Rectangle(double i, double j, double k, double l) :Point(i,j)
{ w=k; h=l; }
void fun(Point s)
{ coutArea=s.Area()endl; }
void main()
{
Rectangle rec(3.0, 5.2, 15.0, 25.0);
fun(rec);
};#includeiostream.h
class Point
{ public:
Point(double i, double j) {x=i; y=j;}
virtual double Area() const{ return 0.0;}
private:
double x, y;
};
class Rectangle:public Point
{ public:
Rectangle(double i, double j, double k, double l);
virtual double Area() const {return w*h;}
private:
double w,h; }; //其它函数同上例;void fun(Point s)
{ coutArea=s.Area()endl; }
void main()
{
Rectangle rec(3.0, 5.2, 15.0, 25.0);
fun(rec);
}
运行结果:
Area=375 ?;§3 虚函数;§3 虚函数;class Point
{ public:
Point(double i, double j) {x=i; y=j;}
virtual double Area() const; //函数声明
private:
double x, y;
};
virtual double Area() const //函数实现
{ return 0.0;};#include iostream.h
class B0 //基类B0声明
{ public:
virtual void display() //虚成员函数
{coutB0::display()endl;}
};;class B1: public B0 //公有派生
{ public:
void display() //自动成为虚函数
{ coutB1::display()endl; }
};
class D1: public B1 //公有派生
{ public:
void display() //自动成为虚函数
{ coutD1::displ
文档评论(0)