C++编程笔记 二(继承与多态)
来源:互联网 发布:mac系统flash插件 编辑:程序博客网 时间:2024/05/17 01:31
#include <iostream>#include <string.h>using namespace std;//定义个test类class test{ private: char id[20]; public: //test构造函数 test(const char *idn) { strcpy(id,idn); } //test成员函数,用来获取数据 char *getid(void) { return id; }};//定义个father类class father{ private: char name[20]; test id;//数据成员中包含一个test类 public: //father的构造函数,无返回值,void也不行 father(const char *n,const char *i); void setName(const char *); char *getName(void); char *getId(void); // 前面加上virtual代表是个虚函数 virtual void show(void); };//father类的show()函数void father::show(void){ cout<<"father------>"<<name<<"id"<<id.getid()<<endl;}//调用成员数据id的函数获取数据char *father::getId(void){ return id.getid();}//father的构造函数,在构造函数后面加上冒号“:”,以及成员数据的名字,//用了在构造函数中为数据成员id类的构造函数传参数(char *i)father::father(const char *n,const char *i):id(i){ strcpy(name,n);}void father::setName(const char *buf){ strcpy(name,(char *)buf);}char *father::getName(void){ return name;}//子类child 公有继承(public)father类//即包含father类的所有信息,但不能访问father类的私有成员//只能访问father类的公有成员和保护成员(protected)class child:public father{ public: void show(void);//child类的show()函数 child(const char *n,const char *i);};//child类的构造函数,为father类传递参数,//写法与为数据成员类传参相同child::child(const char *n,const char *i):father(n,i){}//child类的show()void child::show(void){ cout<< "child----->>"<<"name :"<<getName()<<"id :"<<getId()<<endl;}//func函数参数为指向father类的指针 void func(father *p){ p->show();}int main(){ child s("xiaoming","1001");//虽然s为子类,继承了father类的show函数,//但此时s.show()调用的为子类成员函数 s.show(); //如果想要调用father类的show()函数需要声明 s.father::show(); father p("xiaohong","1001"); //&p为指向father类的指针,则此时执行father类的show()函数 func(&p); func(&s);//&s为指向child类的指针, //但func()函数仍然可以执行,此时执行child类 //的show()函数,两种不同的执行方式为多态,而且 //说明子类也是一种父类,可以执行参数为父类的函数 return 0;}
在上面的func函数中,如果father类的`show()函数没有virtual,则father指针的函数只能执行father的show()函数,加上virtual后,调用的函数根据参数的具体对象执行不同的函数。
如果类中成员函数中virtual后=0,代表类为纯虚类,则这个成员函数可以不实现,如果父类中没有实现,子类继承后子类也是纯虚类
0 0
- C++编程笔记 二(继承与多态)
- C#(二) -继承与多态
- 深入Java 面向对象编程 (二)继承与多态
- Objective-C 学习笔记(二) 类继承,组合,多态等
- Java 继承与多态(二)
- C++继承与多态(二)
- Objective-C学习笔记(二十五)——属性与方法的继承学习
- 高质量C/C++编程指南 阅读笔记(五)类的继承与组合
- C语言面向对象编程(二):继承详解
- C语言面向对象编程(二):继承详解
- Object-C详细编程(二)—封装,继承,多态
- C语言面向对象编程(二):继承详解
- C++--继承与多态
- 《c专家编程》学习笔记(二)
- C++:面向对象编程(封装、继承、多态等)
- Objective-C学习笔记十:继承二
- C++学习笔记——继承与派生(二)
- java 学习笔记 继承与接口(二)
- 读取文件乱码之工具类
- Intersection of Two Linked Lists
- Aadboost分类器原理
- 接口隔离
- cocos2d-x 3.2 物理小游戏教程1 block it需求分析
- C++编程笔记 二(继承与多态)
- JSP:JavaBean+EL函数+JSTL标签
- Nova结构
- ASP.NET 邮件发送 System.Net.Mail
- Java_jdbc 基础笔记之十四 数据库连接(元数据)
- java中如何使用任务调度
- openfire 优化
- Javascript闭包——懂不懂由你,反正我是懂了
- 使用Maven管理spring环境的profile定义