单继承与多重继承的区别

单继承:一个子类(派生类)只有一个父类(只由一个基类派生而成)
多继承:一个子类(派生类)有多个父类(由多个基类派生而成)

派生类的构成

(1) 从基类继承过来的成员(包括数据成员和成员函数)
(2) 在派生类里面新增的成员(包括数据成员和成员函数) 根据继承方式的不同来调整从基类继承过来成员的属性(public,protected,private。最经常使用protected)
派生类的构造函数需要自己定义和声明,不能从基类继承过来,定义的时候需要调用其父类的构造函数。

基类成员的接受

注意点:
1.在派生类里可以定义同名数据成员进行覆盖。
2.不接受构造析构函数。
3.通过继承方式改变访问属性。

基类不能访问其派生类的新增成员。对于派生类访问基类的成员,如何确定基类成员在派生类中的访问属性?

1.基类成员声明时的访问属性

2.继承方式

public 继承下,派生类赋值给父类

1.不能用基类对象对其派生类对象赋值。

2.同一基类的不同派生类的对象之间不能赋值。

3.派生类对象可以向其基类的对象及其引用进行赋值。

#include <iostream>
#include <cstdlib>
#include <string>
using namespace std; class Student
{
private:
string name;
int age;
public:
Student(string s = "", int a = 0): age(a){name = s;};
void print();
}; void Student::print()
{
cout << name << " " << age << endl;
} class UnderGraduate : public Student
{
private:
int num;
int score;
public:
UnderGraduate(string s = "", int age = 0, int i_num = 0, int i_score = 0):
Student(s, age), num(i_num), score(i_score){};
void display();
}; void UnderGraduate::display()
{
print();
cout << num << " " << score << endl;
} int main()
{
UnderGraduate A("LiMing", 20, 10005, 100); A.display(); Student B = A; B.print(); return 0;
}

4.如果函数参数是基类A的引用,那么实参可以为其派生类的对象,系统自动完成类型转换。

void play(Student &B)
{
B.print();
}
UnderGraduate A("LiMing", 20, 10005, 100);

play(A);

5.指向基类对象的指针也可以指向派生类对象。即 派生类对象的地址可以赋值给指向其基类的指针。

指向基类的指针变量 只能访问 派生类对象 的 继承基类的部分,不能访问 派生类增加的成员

关于public private protected 的问题

个人认为,protected 是最合适的继承方式,public 继承虽然完整保留了基类,但是在主函数也可以访问其继承下来的基类成员,不利于封装性。 private 继承只能在其派生类里访问基类成员,而且根据上文的表格,其类型均为private,导致其派生类访问基类的成员很不方便。折中之下,protected 继承既有利于保护封装性,也让派生类方便访问其继承的基类成员。

C++课程小结 继承与派生的更多相关文章

  1. 课程设计__继承与派生,重载<<

    ///继承与派生 #include <iostream> using namespace std; class Point { public: Point (,):x(a),y(b) {} ...

  2. python基础——继承与派生、组合

    python基础--继承与派生 1 什么是继承: 继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类成为基类或超累,新建的类成为派生类或子类 1.1 继承分为:单 ...

  3. 4-13 object类,继承和派生( super) ,钻石继承方法

    1,object 类 object class A: ''' 这是一个类 ''' pass a = A() print(A.__dict__) # 双下方法 魔术方法 创建一个空对象 调用init方法 ...

  4. Python(面向对象编程——2 继承、派生、组合、抽象类)

    继承与派生 ''' 继承:属于 组合:包含 一. 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称 ...

  5. Python基础(16)_面向对象程序设计(类、继承、派生、组合、接口)

    一.面向过程程序设计与面向对象程序设计 面向过程的程序设计:核心是过程,过程就解决问题的步骤,基于该思想设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题的简单化,流程化 缺点: ...

  6. Day08:继承与派生,多态,封装,绑定与非绑定方法,面向对象高级(反射,__str__,__del__)

    上节课复习:1.编程思想    面向过程        核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么后干什么        基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维 ...

  7. day24 02 单继承(派生)

    day24 02 单继承(派生) 1.首先来看一个简单的例子 比如: 狗类的属性有:吃,喝,看门 鸟类的属性有:吃,喝,下蛋 看门和下蛋就是这两种动物不同的属性,而吃喝是两个共同的属性 以下代码实现了 ...

  8. Python--面向对象的程序设计之继承与派生

    继承与派生 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 cla ...

  9. C++学习笔记:07 类的继承与派生

    课程<C++语言程序设计进阶>清华大学 郑莉老师) 基本概念 继承与派生的区别: 继承:保持已有类的特性而构造新类的过程称为继承. 派生:在已有类的基础上新增自己的特性(函数方法.数据成员 ...

随机推荐

  1. LINUX的特殊字符含义

    # 井号 (comments)这几乎是个满场都有的符号,除了先前已经提过的"第一行"#!/bin/bash井号也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后面的是注 ...

  2. mysql 权限管理 针对库 授权 db.*

    需求 只放行user表 db1库的select权限 mysql> grant select on db1.* to 'mike'@'localhost'; Query OK, rows affe ...

  3. 仿照hibernate封装的一个对数据库操作的jdbc工具类

    package project02_Order_management.util; import java.io.IOException; import java.lang.reflect.Field; ...

  4. 001-window版redis安装

    一.参考地址 官方地址:https://redis.io/ windows版本[学习使用]:https://github.com/MicrosoftArchive/redis 二.windows版re ...

  5. springmvc接收参数

    springmvc执行流程 搭建ssm框架:http://www.cnblogs.com/liyafei/p/7955413.html 1:从表单中接收 普通请求参数 结构目录 role.html 1 ...

  6. hdu1251(统计难题)

    这题就是一个字典树的模板题 统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Othe ...

  7. SSM请求的响应

    1.请求响应文本到页面直接用pw.println("文本信息");打印到页面: 2.如果请求方法前不加@ResponseBody,返回字符串直接转发到对应的页面: 3.如果请求方法 ...

  8. 在Keras模型中one-hot编码,Embedding层,使用预训练的词向量/处理图片

    最近看了吴恩达老师的深度学习课程,又看了python深度学习这本书,对深度学习有了大概的了解,但是在实战的时候, 还是会有一些细枝末节没有完全弄懂,这篇文章就用来总结一下用keras实现深度学习算法的 ...

  9. RAC禁用DRM特性

    查看"_gc"开头的隐藏参数值: set linesize 333 col name for a35 col description for a66 col value for a ...

  10. 015-awk

    1.awk的处理方式: 一次处理一行. 对每行可以进行切片处理,针对字段处理.2.awk的格式: awk BEGIN{循环之前初始化} [options] 'command' END{循环之后结尾} ...