[C/C++]继承
来源:互联网 发布:bp神经网络算法步骤 编辑:程序博客网 时间:2024/05/21 19:31
公有继承 class Worker:public Person
练习题:
#include <iostream>#include <stdlib.h>#include <string>using namespace std;/** * 定义人的类: Person * 数据成员姓名: m_strName * 成员函数: eat() */class Person{public: string m_strName;void eat(){cout << "eat" << endl;}};/** * 定义士兵类: Soldier * 士兵类公有继承人类: public * 数据成员编号: m_strCode * 成员函数: attack() */class Soldier:public Person{public:string m_strCode;void attack(){cout << "fire!!!" << endl;}};int main(void){ // 创建Soldier对象Soldier soldier; // 给对象属性赋值 soldier.m_strName = "Jim";soldier.m_strCode = "592"; // 打印对象属性值cout << soldier.m_strName << endl;cout << soldier.m_strCode << endl; // 调用对象方法soldier.eat();soldier.attack();return 0;}
保护继承 class Worker:protected Person
私有继承 class Worker:private Person
继承中的特殊关系
隐藏 (相当于 JAVA 的 重写)
注意:子类函数与父类名称相同即构成隐藏,跟参数没有关系练习题:
#include <iostream>#include <stdlib.h>#include <string>using namespace std;/** * 定义人类: Person * 数据成员: m_strName * 成员函数: attack() */class Person{public: string m_strName;void attack(){cout << "attack" << endl;}};/** * 定义士兵类: Soldier * 士兵类公有继承人类 * 数据成员: m_strName * 成员函数: attack() */class Soldier:public Person{public:string m_strName;void attack(){cout << "fire!!!" << endl;}};int main(void){ // 实例士兵对象Soldier soldier; // 向士兵属性赋值"tomato" soldier.m_strName = "tomato"; // 通过士兵对象向人类属性赋值"Jim"soldier.Person::m_strName = "Jim"; // 打印士兵对象的属性值cout << soldier.m_strName << endl; // 通过士兵对象打印人类属性值cout << soldier.Person::m_strName << endl; // 调用士兵对象方法soldier.attack(); // 通过士兵对象调用人类方法 soldier.Person::attack();return 0;}
多重继承
class Person {}
class Worker:public Person{}
class Soldier:public Worker{}
多继承
class Person{}
class Worker{}
class Soldier : public Person, public Worker {}
练习题:
#include <iostream>#include <stdlib.h>#include <string>using namespace std;/** * 定义工人类: Worker * 数据成员: m_strName * 成员函数: work() */class Worker{public: Worker(string name){m_strName = name;cout << "Worker" << endl;}~Worker(){cout << "~Worker" << endl;}void work(){cout << m_strName << endl;cout << "work" << endl;}protected:string m_strName;};/** * 定义儿童类: Children * 数据成员: m_iAge * 成员函数: play() */class Children{public:Children(int age){m_iAge = age;cout << "Children" << endl;}~Children(){cout << "~Children" << endl;}void play(){cout << m_iAge << endl;cout << "play" << endl;}protected:int m_iAge;};/** * 定义童工类: ChildLabourer * 公有继承工人类和儿童类 */class ChildLabourer : public Worker, public Children{public:ChildLabourer(string name, int age):Worker(name),Children(age){cout << "ChildLabourer" << endl;}~ChildLabourer(){cout << "~ChildLabourer" << endl;}};int main(void){ // 使用new关键字创建童工类对象ChildLabourer *pc = new ChildLabourer("小明", 12); // 通过童工对象调用父类的work()和play()方法pc->work(); pc->play(); // 释放 delete pc; pc = NULL;return 0;}
虚继承 virtual
class A : virtual public B {}
class C : virtual public B {}
解决父类被多个子类继承,造成重定义问题的方法:
#ifndef PERSON_H#define PERSON_H#pragma once#include <string>using namespace std;class Person{public:Person();~Person();void eat();string m_strName;string m_iAge;};#endif // !PERSON_H
#include <iostream>#include <stdlib.h>#include <string>using namespace std;/** * 定义人类: Person */class Person{public: Person(){cout << "Person" << endl;}~Person(){cout << "~Person" << endl;}void eat(){cout << "eat" << endl;}};/** * 定义工人类: Worker * 虚继承人类 */class Worker : virtual public Person{public:Worker(string name){m_strName = name;cout << "Worker" << endl;}~Worker(){cout << "~Worker" << endl;}void work(){cout << m_strName << endl;cout << "work" << endl;}protected:string m_strName;};/** * 定义儿童类:Children * 虚继承人类 */class Children : virtual public Person{public:Children(int age){m_iAge = age;cout << "Children" << endl;}~Children(){cout << "~Children" << endl;}void play(){cout << m_iAge << endl;cout << "play" << endl;}protected:int m_iAge;};/** * 定义童工类:ChildLabourer * 公有继承工人类和儿童类 */class ChildLabourer:public Worker, public Children{public:ChildLabourer(string name, int age):Worker(name),Children(age){cout << "ChildLabourer" << endl;}~ChildLabourer(){cout << "~ChildLabourer" << endl;}};int main(void){ // 用new关键字实例化童工类对象ChildLabourer *p = new ChildLabourer("alex", 12); // 调用童工类对象各方法。p->eat();p->work();p->play();delete p;p = NULL;return 0;}
阅读全文
0 0
- c继承
- C++----------------继承
- 【c#】继承
- C++:继承
- C++::继承
- [C++]继承
- 【C++】继承
- 【C#】继承
- 【c++】继承
- 【C++】继承
- c#-继承
- 【C++】 继承
- 【C#】继承
- C++|继承
- 【C++】继承
- C/C++--私有继承
- [C/C++]继承
- C++(继承语法&&继承方式)
- 初学Unity3D之制作贪吃蛇(一)
- Java 分页对象
- position里relative与absolute的一些区别
- 51Node 1499图
- 网上商城mvc模式分析
- [C/C++]继承
- Substrings HDU
- 二叉树的建立与遍历
- HihoCoder 1233 Boxes BFS
- hdu1542 Atlantis(扫描线+矩形面积并)
- springmvc入门
- Servlet 常见的注解(@WebServlet,@WebListenert,@WebFilter)
- Java并发之AQS详解
- jersey实现文件上传