C++语言基础 例程 虚函数
来源:互联网 发布:php网站框架 编辑:程序博客网 时间:2024/06/03 05:23
贺老师的教学链接 本课讲解
指向基类的指针,为何只能访问来自基类成员?!
#include <iostream>#include <string>using namespace std;//声明基类Studentclass Student{public: Student(int, string,float);//声明构造函数 void display( ); //声明输出函数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";}//声明公用派生类Graduateclass Graduate:public Student{public: Graduate(int, string, float, float); //声明构造函数 void display( ); //声明输出函数private: float pay;};// Graduate类成员函数的实现void Graduate::display( ) //定义输出函数{ cout<<"num:"<<num<<"\nname:"<<name<<"\nscore:"<<score<<"\npay="<<pay<<endl;}Graduate::Graduate(int n, string nam,float s,float p):Student(n,nam,s),pay(p) { }//主函数int main(){ Student stud1(1001,"Li",87.5); //定义Student类对象stud1 Graduate grad1(2001,"Wang",98.5,563.5); //定义Graduate类对象grad1 Student *pt=&stud1; //定义指向基类对象的指针变量pt pt->display( ); pt=&grad1; pt->display( ); return 0;}
一招虚函数,从此出樊笼
#include <iostream>#include <string>using namespace std;//声明基类Studentclass Student{public: Student(int, string,float);//声明构造函数 virtual void display( ); //声明输出函数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";}//声明公用派生类Graduateclass Graduate:public Student{public: Graduate(int, string, float, float); //声明构造函数 void display( ); //声明输出函数private: float pay;};// Graduate类成员函数的实现void Graduate::display( ) //定义输出函数{ cout<<"num:"<<num<<"\nname:"<<name<<"\nscore:"<<score<<"\npay="<<pay<<endl;}Graduate::Graduate(int n, string nam,float s,float p):Student(n,nam,s),pay(p) { }//主函数int main(){ Student stud1(1001,"Li",87.5); //定义Student类对象stud1 Graduate grad1(2001,"Wang",98.5,563.5); //定义Graduate类对象grad1 Student *pt=&stud1; //定义指向基类对象的指针变量pt pt->display( ); pt=&grad1; pt->display( ); return 0;}
对比:未用虚函数
#include <iostream>using namespace std;class Circle{public: Circle(double r=0):radius(r) { } double area ( ) const { return 3.14159*radius*radius; }protected: double radius;};class Cylinder:public Circle{public: Cylinder (double r=0,double h=0):Circle(r),height(h) {} double area() const { return 2*Circle::area( )+2*3.14159*Circle::radius*height; };protected: double height;};int main( ){ Circle c1(5.2); Cylinder cy1(5.2, 10); Circle *pc=&c1; cout<<pc->area()<<endl; pc = &cy1; cout<<pc->area()<<endl; return 0;}
对比:用了虚函数
#include <iostream>using namespace std;class Circle{public: Circle(double r=0):radius(r) { } double area ( ) const { return 3.14159*radius*radius; }protected: double radius;};class Cylinder:public Circle{public: Cylinder (double r=0,double h=0):Circle(r),height(h) {} double area() const { return 2*Circle::area( )+2*3.14159*Circle::radius*height; };protected: double height;};int main( ){ Circle c1(5.2); Cylinder cy1(5.2, 10); Circle *pc=&c1; cout<<pc->area()<<endl; pc = &cy1; cout<<pc->area()<<endl; return 0;}
事情本就该这样——抽象的动物不会叫
#include <iostream>using namespace std;class Animal{public: virtual void cry() { cout<<"咋叫?"<<endl; }};class Dog: Animal{public: void cry() { cout<<"汪!"<<endl; }};class Cat: Animal{...};class Mouse: Animal{...};... int main( ){ Animal *p, a; p = &a; p->cry(); Dog d; p = &d; p->cry(); Cat c; p = &c; p->cry(); Mouse m; p = &m; p->cry(); return 0;}
wxWidgets中利用虚函数
class MyApp : public wxApp{public: // Called on application startup virtual bool OnInit();};class WXDLLIMPEXP_CORE wxApp : public wxAppBase{public: wxApp(); virtual ~wxApp(); // override base class (pure) virtuals virtual bool Initialize(int& argc, wxChar **argv); virtual void CleanUp(); ……};
0 0
- C++语言基础 例程 纯虚函数
- C++语言基础 例程 虚函数
- C语言基础及例程
- C++语言基础 例程 构造函数
- C++语言基础 例程 默认构造函数
- C++语言基础 例程 析构函数
- C++语言基础 例程 函数中的引用
- C++语言基础 例程 虚析构函数
- C++语言基础 例程 内置函数
- C++语言基础 例程 函数重载
- C++语言基础 例程 函数模板
- C语言函数参数不定的例程
- C语言基础 函数
- C语言基础 函数
- C++语言基础 例程 类的成员函数
- C++语言基础 例程 带默认参数的构造函数
- C++语言基础 例程 有默认参数的函数
- C语言本质-- main函数和启动例程
- C++语言基础 例程 案例:一个接口,多种方法
- 系统相册标题显示如何改成中文
- APM_01
- C++语言基础 例程 虚析构函数
- C++语言基础 例程 纯虚函数
- C++语言基础 例程 虚函数
- C++语言基础 例程 抽象类
- Linux下的进程间通信-详解
- css sprint使用方法
- C++语言基础 例程 设计模式简介
- Wordpress for Sae引发的一系列
- Android BroadCastReceiver 广播接收者使用
- 高精度加法
- cocos2d-x 3.3 之卡牌设计 NO.3 卡牌移动