类的继承(定义+继承方式+多继承)
一、类的继承
文章目录
- 一、类的继承
- 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:
类的继承(定义+继承方式+多继承)相关推荐
- 创建线程的两种方式:继承Thread类和实现Runnable接口
第一种方式:继承Thread类 步骤:1.定义类继承Thread 2.覆写Threa类的run方法. 自定义代码放在run方法中,让线程运行 3.调用线程的star方法, 该线程有两个作用:启动线程, ...
- C++>继承,继承方式及其比较,子类和父类对象指针,派生类的默认成员函数,虚继承,继承与友元,继承与静态成员
继承 继承的概念与定义 概念: 继承是指一个子类(或称为派生类)继承父类(或称为基类)的特征(属性和操作).继承是面向对象程序设计时实现代码复用的重要手段,它允许在原有的类的基础上进行扩展,增加功能, ...
- 类的继承定义一个computer类在此基础上派生出两个子类(继承与多态绑定)
题目如下 定义一个计算机类(Computer),并在它的基础上派生出两个子类:台上机(Desktop)和便携机类(Notebook),在Computer中定义几个方法,并在子类Desktop和Note ...
- java类注解是否可以通过实现接口或继承父类的方式获得
接口类 @Service public interface UserService {public void get(); } 实现类 public class UserServiceImpl imp ...
- python 类装饰器和继承_python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)...
介绍装饰器.继承.元类.mixin,四种給类动态添加类属性和方法的方式 有时候需要給类添加额外的东西,有些东西很频繁,每个类都需要,如果不想反复的复制粘贴到每个类,可以动态添加. 1 #coding= ...
- day20Java-Thread-多线程实现方式1继承Thread类
博客 Java-(高级) 文章目录 多线程实现方式 多线程实现方式1继承Thread类 获取线程对象的名称 线程调度 线程控制 public static void sleep(long millis ...
- CPPDay05 C的静态成员,类的静态成员,单例模式,静态成员函数,继承(面向对象三大特性,高类聚,低耦合),继承方式(private,protected,public)多重复杂继承,虚继承
目录 0x00 C中的静态成员: 0x01类的静态成员: 0x02单例模式: 0x03静态成员函数: 0x04继承: 0x05继承方式: 0x06多重复杂继承: 0x07虚继承: 0x00 C中的静态 ...
- python支持保护类型_day14总结-内置类属性、私有化、保护及继承
内置类属性 创建类的时候,系统默认为我们添加的类的属性 class Person: """人类""" number = 61 def __i ...
- 继承和多态 1.0 -- 继承概念(is-a、has-a,赋值兼容规则,隐藏重定义)
普通继承和访问权限 当一个继承没有虚拟继承或者是多重继承时,就是一个简单的继承的时候,这个时候就是一个普通的继承. 普通继承的内存空间是:子类的对象中,包含了父类的成员变量,同时也可以调用父类的成员函 ...
最新文章
- RHEL5(CentOS)下nginx+php+mysql+tomcat+memchached配置全过程(转)
- Python组合数据类型之集合类型
- .net中的SelectList在Html.DropdownList中的使用
- HDFS设置配额管理
- 对于理想的团队模式的设想和对软件流程的理解
- 25利他行为可以学习和模仿吗
- 上周热点回顾(5.26-6.1)
- linux搜索一天内更新的所有文件,linux下怎样更新文件夹下所有文件的时间戳
- 百度web前端面试2015.10.18
- 查纸张开数软件怎么样
- 外币兑换系统(某专业大作业)
- excle自动查找,自动匹配数据;查找对比两个相同的但顺序错乱的表格内容。
- 台式计算机怎样能搜无线连接,电脑如何连无线网_台式电脑怎么连接wifi步骤-win7之家...
- python网球比赛模拟_python初体验 —— 模拟体育竞技
- AD转换器输入之前为何要接一个电压跟随器?
- 测试显卡性能的两种方法
- 让测试/开发/生产环境相分离
- Excel怎么设置密码?这4个方法必须掌握!
- 办公非常好用的网站,一旦使用就无法离开它
- 项目——排队叫号系统设计