单继承与多重继承的区别

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

派生类的构成

(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. mysql 开启profiling

    mysql 开启profiling

  2. weka数据挖掘拾遗(一)---- 生成Arff格式文件

    一.什么是arff格式文件 1.arff是Attribute-Relation File Format缩写,从英文字面也能大概看出什么意思.它是weka数据挖掘开源程序使用的一种文件模式.由于weka ...

  3. opencv3寻找最小包围矩形在图像中的应用-滚动条

    #include<opencv2/opencv.hpp> #include<iostream> #include<vector> using namespace c ...

  4. python 的 json 转换

    python 的 json 转换 本文为原创文章,禁止转载! 本文以 json.dumps()  和 json.loads() 方法进行 Python 数据和 json 格式之间转换,进行讲解 首先比 ...

  5. DW课堂练习 用所学的知识去制作一个 (邮箱的注册页面)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. MFC六大核心机制之四:永久保存(串行化)

    永久保存(串行化)是MFC的重要内容,可以用一句简明直白的话来形容其重要性:弄懂它以后,你就越来越像个程序员了! 如果我们的程序不需要永久保存,那几乎可以肯定是一个小玩儿.那怕我们的记事本.画图等小程 ...

  7. Java缓存学习之六:Spring单独使用EhCache

      通过在Application Context中配置EhCacheManagerFactoryBean和EhCacheFactoryBean,我们就可以把对应的EhCache的CacheManage ...

  8. 安装vscode with springboot

    1.安装jdk8 2.下载vscode,一切按照默认配置完成安装.下载地址:https://code.visualstudio.com 3.安装完成后,运行vscode.如果没有任何反应,在命令行上运 ...

  9. foxmail收取163企业邮箱设置,不能直接用foxmail默认的配置,否则一直提示帐号密码错误

    foxmail收取163企业邮箱设置,不能直接用foxmail默认的配置,否则一直提示帐号密码错误,收件.发件服务器配置需要用imap.ym.163.com,smtp.ym.163.com三级域名,帐 ...

  10. cocoapod 快速更新,加载

    pod install --verbose --no-repo-update pod update --verbose --no-repo-update