一、类的继承

文章目录

  • 一、类的继承
    • 1.继承类的定义
      • 运行结果1:
    • 2.三种类继承的方式以及成员声明的方式+多个类的继承
      • 运行结果2:
1.继承类的定义
#include<iostream>using namespace std;class Student {
protected:const char* name;int num;public:Student(const char* name, int num) :name(name), num(num) {};void display(void);
};void Student::display(void) {cout << "name:" << name << "num:" << num << endl;
}class Pri_Student:public Student {
private:int height;int weight;
public:Pri_Student(const char* name, int num, int h, int w) :Student(name, num) { height = h; weight = w; };//不仅需要对派生类增加的数据成员的初始化,也要考虑基类的数据成员的初始化(直接调用基类的初始化函数)//格式:派生类的构造函数(全部成员参数):基类的构造函数(基类的成员参数){派生类参数的初始化}//实现形式非常类似与参数初始化列表//也可以用参数初始化列表一并进行参数初始化//Pri_Student(char name[], int num, int h, int w) :Student(name, num) ,height(h),weight(w){};void display1(void);void display(void); //在子类中也可以定义与基类相同名字的函数,其定义会覆盖基类的函数定义
};void Pri_Student::display(void) {cout << "display" << endl;
}void Pri_Student::display1(void) {cout << "name: " << name << "num: " << num << "height: " << height << "weight: " << weight <<  endl;
}int main(void) {Pri_Student S1("Sam", 1006, 183, 72);S1.display();S1.display1();return 0;
}
运行结果1:

2.三种类继承的方式以及成员声明的方式+多个类的继承
# private:私有(最少用)
# protected:保护(派生类可以访问)
# public: 公用(所有人都可以访问)* 友元函数与派生类的区分:
# 友元函数需要在基类中声明,可以直接访问基类的成员数据(私有成员也可以直接访问)
# 派生类只能访问基类中的公用变量以及保护变量,不可以直接访问基类中的私有变量
#include<iostream>
using namespace std;class Student {
//成员访问权限限定符:private,public,protected
private:int score;protected:string name;public:Student(int num, int score, string name) :num(num), name(name) ,score(score) {};int num;
};//继承方式限定符:public,protected,private
//公用继承public:基类公用成员+保护成员在派生类中保持原有访问权限,基类私有成员仍为基类私有
class Mid_Student_pub : public Student
{
public:Mid_Student_pub(int num, int score, string name, int math) :Student(num, score, name) { Math = math; };//void Display(void){printf("%d",score);}非法访问基类的私有变量,会报错void Display_pub(void);
protected:int Math;
};void Mid_Student_pub::Display_pub(void) {cout << name << " : " << num << " , " <<  Math << endl;
}//基类的私有成员不可以被派生类访问,只能借助基类的函数间接引用基类的私有成员(很好用private和private继承)//私有继承private:公用成员+保护成员在派生类中变成了私有成员,基类的私有成员仍为基类私有
class Mid_Student_pri : private Student
{
public:Mid_Student_pri(int num, int score, string name, int english) :Student(num, score, name) { English = english; };void Display_pri(void);
protected:int English;
};void Mid_Student_pri::Display_pri(void) {cout << name << " : " << num << " , " << English << endl;
}//受保护的继承protected:公用成员+保护成员在派生类中变成了保护成员,基类的私有成员仍为基类私有
class Mid_Student_pro : protected Student
{
public:Mid_Student_pro(int num, int score, string name, int chinese) :Student(num, score, name) { Chinese = chinese; };void Display_pro(void);
protected:int Chinese;
};void Mid_Student_pro :: Display_pro(void) {cout << name << " : " << num << " , " << Chinese << endl;
}class Score {
protected:int Chinese;int Math;int English;public:Score(int math, int chinese, int english) :Math(math), Chinese(chinese), English(english) {};
};class Student_sum : public Student,public Score
{
public:Student_sum(int num, int score, string name, int math, int english, int chinese) :Student(num, score, name), Score(math,chinese,english) {};void Display_sum(void);
};void Student_sum::Display_sum(void) {cout << name << " : " << num << " , " << "Chinese: " << Chinese << " English: " << English << " Math: " << Math << endl;
}//如果类作为对外的借口,用public->不改变基类成员的权限
//如果不希望派生类被外部访问,则用protectedint main(void)
{Mid_Student_pub S1(1,12,"sun", 123);S1.Display_pub();cout << S1.num << endl; //可以正常输出!Mid_Student_pri S2(2, 13, "hao", 666);S2.Display_pri();//cout << S1.num << endl;不可以正常输出,num已经变成私有的了Mid_Student_pro S3(3, 14, "wei", 888);S3.Display_pro();//cout << S1.num << endl;不可以正常输出,num已经变成保护成员protected了Student_sum S4(4, 15, "king", 111, 222, 333);S4.Display_sum();return 0;
}//多级继承都使用公用继承,否则如果父亲使用了私有继承,那么爷爷的公用和保护成员在父亲处成为了私有成员
//无法被儿子访问(隔代无法正常访问的问题)
运行结果2:

类的继承(定义+继承方式+多继承)相关推荐

  1. 创建线程的两种方式:继承Thread类和实现Runnable接口

    第一种方式:继承Thread类 步骤:1.定义类继承Thread 2.覆写Threa类的run方法. 自定义代码放在run方法中,让线程运行 3.调用线程的star方法, 该线程有两个作用:启动线程, ...

  2. C++>继承,继承方式及其比较,子类和父类对象指针,派生类的默认成员函数,虚继承,继承与友元,继承与静态成员

    继承 继承的概念与定义 概念: 继承是指一个子类(或称为派生类)继承父类(或称为基类)的特征(属性和操作).继承是面向对象程序设计时实现代码复用的重要手段,它允许在原有的类的基础上进行扩展,增加功能, ...

  3. 类的继承定义一个computer类在此基础上派生出两个子类(继承与多态绑定)

    题目如下 定义一个计算机类(Computer),并在它的基础上派生出两个子类:台上机(Desktop)和便携机类(Notebook),在Computer中定义几个方法,并在子类Desktop和Note ...

  4. java类注解是否可以通过实现接口或继承父类的方式获得

    接口类 @Service public interface UserService {public void get(); } 实现类 public class UserServiceImpl imp ...

  5. python 类装饰器和继承_python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)...

    介绍装饰器.继承.元类.mixin,四种給类动态添加类属性和方法的方式 有时候需要給类添加额外的东西,有些东西很频繁,每个类都需要,如果不想反复的复制粘贴到每个类,可以动态添加. 1 #coding= ...

  6. day20Java-Thread-多线程实现方式1继承Thread类

    博客 Java-(高级) 文章目录 多线程实现方式 多线程实现方式1继承Thread类 获取线程对象的名称 线程调度 线程控制 public static void sleep(long millis ...

  7. CPPDay05 C的静态成员,类的静态成员,单例模式,静态成员函数,继承(面向对象三大特性,高类聚,低耦合),继承方式(private,protected,public)多重复杂继承,虚继承

    目录 0x00 C中的静态成员: 0x01类的静态成员: 0x02单例模式: 0x03静态成员函数: 0x04继承: 0x05继承方式: 0x06多重复杂继承: 0x07虚继承: 0x00 C中的静态 ...

  8. python支持保护类型_day14总结-内置类属性、私有化、保护及继承

    内置类属性 创建类的时候,系统默认为我们添加的类的属性 class Person: """人类""" number = 61 def __i ...

  9. 继承和多态 1.0 -- 继承概念(is-a、has-a,赋值兼容规则,隐藏重定义)

    普通继承和访问权限 当一个继承没有虚拟继承或者是多重继承时,就是一个简单的继承的时候,这个时候就是一个普通的继承. 普通继承的内存空间是:子类的对象中,包含了父类的成员变量,同时也可以调用父类的成员函 ...

最新文章

  1. RHEL5(CentOS)下nginx+php+mysql+tomcat+memchached配置全过程(转)
  2. Python组合数据类型之集合类型
  3. .net中的SelectList在Html.DropdownList中的使用
  4. HDFS设置配额管理
  5. 对于理想的团队模式的设想和对软件流程的理解
  6. 25利他行为可以学习和模仿吗
  7. 上周热点回顾(5.26-6.1)
  8. linux搜索一天内更新的所有文件,linux下怎样更新文件夹下所有文件的时间戳
  9. 百度web前端面试2015.10.18
  10. 查纸张开数软件怎么样
  11. 外币兑换系统(某专业大作业)
  12. excle自动查找,自动匹配数据;查找对比两个相同的但顺序错乱的表格内容。
  13. 台式计算机怎样能搜无线连接,电脑如何连无线网_台式电脑怎么连接wifi步骤-win7之家...
  14. python网球比赛模拟_python初体验 —— 模拟体育竞技
  15. AD转换器输入之前为何要接一个电压跟随器?
  16. 测试显卡性能的两种方法
  17. 让测试/开发/生产环境相分离
  18. Excel怎么设置密码?这4个方法必须掌握!
  19. 办公非常好用的网站,一旦使用就无法离开它
  20. 项目——排队叫号系统设计

热门文章

  1. 爬梯:TKMapper的api记录
  2. cad之画多边形的一些注意事项
  3. 【c++】2023杭州月薪个税计算(chatGPT帮忙加注释)
  4. 《公共部门人力资源管理》考题2023春季
  5. android检测代理,防止别人抓包
  6. 2023年二建报考条件是什么?考试考什么?来考网
  7. Vue中动态绑定style样式写法
  8. [程序员] 论程序员如何追女孩
  9. B+树相比B树的优势
  10. Android银联手机控件支付使用教程