虚函数&纯虚函数
来源:互联网 发布:单片机编程软件是哪些 编辑:程序博客网 时间:2024/05/27 09:46
虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针引用来访问基类和派生类中的同名函数。
#include<iostream>using namespace std;class Student{public: Student(int,string,float); virtual void display();//virtual 声明为虚函数protected: int num; string name; float score;};//Student类成员函数的实现Student::Student(int n,string nam,float s){ num=n;name=nam;score=s;};void Student::display(){ cout<<"num:"<<num<<"\nname:"<<name<<"\nscore:"<<score<<"\n\n"<<endl;}//声明公用派生类Graduateclass Graduate:public Student{public: Graduate(int,string,float,float); void display();private: float wage;};Graduate::Graduate(int n,string nam,float s,float w):Student(n,nam,s),wage(w){}void Graduate::display(){ cout<<"num:"<<num<<"\nname:"<<name<<"\nscore:"<<score<<"\nwage"<<wage<<endl;}int main(){ Student stud1(1001,"Li",87.5); Graduate grad1(2001,"Wang",98.5,1200); Student *pt=&stud1; pt->display(); pt=&grad1; pt->display(); return 0;}
#include<iostream>using namespace std;//声明抽象基类Shapeclass Shape{public: virtual float area()const {return 0.0;} virtual float volume()const {return 0.0;} virtual void shapeName() const=0; //纯虚函数 /*由于考虑到在Point类中不再对area和volume函数进行重新定义,因此没有吧area和volume也声明为纯虚函数*/};class Point:public Shape{public: Point(float x=0,float y=0); //声明构造函数 void setPoint(float,float); float getX() const {return x;} float getY() const {return y;} virtual void shapeName() const {cout<<"Point:";} //对纯虚函数进行再定义 friend ostream & operator<<(ostream &,const Point &); //运算符重载protected: float x,y;};Point::Point(float a,float b){ x=a;y=b;}void Point::setPoint(float a, float b){ x=a;y=b;}ostream &operator <<(ostream &output,const Point &p){ output<<"{"<<p.x<<","<<p.y<<"]"; return output;}class Circle:public Point{public: Circle(float x=0,float y=0,float r=0); void setRadius(float ); float getRadius()const ; virtual float area() const; virtual void shapeName() const{cout<<"Circle:";} friend ostream & operator<<(ostream &output,const Circle &);protected: float radius;};Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}void Circle::setRadius(float r){radius=r;}float Circle::getRadius()const {return radius;}float Circle::area() const {return 3.14159*radius*radius; }ostream &operator <<(ostream &output,const Circle &c){ output<<"["<<c.x<<","<<c.y<<"],r="<<c.radius; return output;}class Cylinder:public Circle{public: Cylinder(float x=0,float y=0,float r=0,float h=0);//声明构造函数 void setHeight(float); virtual float area() const; virtual float volume() const; virtual void shapeName() const{cout<<"Cylinder";} friend ostream &operator <<(ostream &,const Cylinder &);protected: float height;};Cylinder::Cylinder(float x, float y, float r, float h):Circle(x,y,r),height(h) { }void Cylinder::setHeight(float h) {height=h; }float Cylinder::area() const{ return 2*Circle::area()+2*3.1415926*radius*height;}float Cylinder::volume() const{ return Circle::area()*height;}ostream &operator <<(ostream &output,const Cylinder &cy){ output<<"["<<cy.x<<","<<cy.y<<"],r="<<cy.radius<<",h="<<cy.height; return output;}int main(){ Point point(3.2,4.5); Circle circle(2.4,1.2,5.6); Cylinder cylinder(3.5,6.4,5.2,10.5); point.shapeName(); //用对象名建立静态关联 cout<<point<<endl; circle.shapeName(); cout<<circle<<endl; cylinder.shapeName(); cout<<cylinder<<endl; Shape *pt; //定义基类指针 pt=&point; //是指针指向Point类对象 pt->shapeName(); //用指针建立动态关联 cout<<"x="<<point.getX()<<",y="<<point.getY()<<"\narea="<<pt->area()<< "\nvolume="<<pt->volume()<<endl<<endl; pt=&circle; //指针指向circle类对象 pt->shapeName(); //用指针建立动态关联 cout<<"x="<<circle.getX()<<",y="<<circle.getY()<<"\narea="<<pt->area()<<"\nvoluem=" <<pt->volume()<<endl<<endl; pt=&cylinder;//指针指向cylinder类对象 pt->shapeName(); //用指针建立动态关联 cout<<"x="<<cylinder.getX()<<",y="<<cylinder.getY()<<"\narea="<<pt->area()<<"\nvoluem=" <<pt->volume()<<endl<<endl; return 0;}
“`
0 0
- 虚函数 纯虚函数
- 虚函数、纯虚函数
- 纯虚函数,虚函数
- 虚函数 纯虚函数
- 虚函数\纯虚函数
- 虚函数 纯虚函数
- 虚函数、纯虚函数
- 虚函数,纯虚函数
- 虚函数 纯虚函数
- 虚函数&纯虚函数
- 虚函数 纯虚函数
- 虚函数,纯虚函数
- 纯虚函数
- 纯虚函数
- (纯)虚函数意义
- 纯虚函数
- c++纯虚函数
- 纯虚函数(转)
- ZOJ Problem Set - 3710 Friends(暴力)
- GUI 关于JComboBox的用法
- 自己碰到的一些问题
- PyQt 5 教程
- appium native xpath
- 虚函数&纯虚函数
- 反函数的导数 基本初等函数的求导公式
- mac 连接VPS搭建SS,mac使用SS客户端设置
- Codeforences B. Island Puzzle
- UVA 10827Maximum sum on a torus
- 解决在VMware安装Linux无法全屏显示
- HttpClient实现客户端与服务器的通信
- Android直接连Mysql数据库
- HDU 2553 N皇后问题 (回溯 深度优先搜索)