派生类对象包含从基类继承类的数据成员,他们构成了“基类子对象”
基类中的私有成员,不允许在派生类成员函数中被访问,也不允许派生类的对象访问他们;
真正体现基类私有,对派生类也不开放其权限;
基类中的公有成员:
若是public继承,则成为派生类的公有成员,既可以在派生类成员函数中访问,
也可以被派生类的对象访问; 若是private继承方式,则只能供派生类成员函数访问,不能被派生类的对象访问; #include <iostream>
using namespace std;
class B
{
public:
void f()
{
cout << "in B::f()..." << endl;
}
};
class D1 :public B {};
class D2 :private B
{
public:
void g()
{
cout << "in D2::g(),calling f()..." << endl;
f();//私有继承时,基类接口在子类成员函数中可以使用;
}
}; int main()
{
cout << "in main()..." << endl; D1 obj1;
cout << "calling obj1.f()..." << endl; D2 obj2;
cout << "calling obj2.g()..." << endl;
obj2.g();
//error f()为私有继承,所以obj2.f()//基类接口不允许子类对象调用;
}

重写与重载的区别:

函数重载要求函数名字必须一样,函数的参数要求不一样;

而函数的重写则是函数名字和函数的参数必须都一样;

基类已定义的成员函数,在派生类中可以重新定义它,这被称为函数重写(override)

重写发生时,基类中该成员函数的其他重载函数都将被屏蔽,不能提供给派生类对象使用;

可以在派生类中使用using 类名::成员函数名;在派生类中恢复指定的基类成员函数(即去掉屏蔽),使它重新可以使用;

#include <iostream>
using namespace std; class T {};
class B
{
public:
void f()
{
cout << "B::f()\n";
}
void f(int i)
{
cout << "B::f(" << i << ")\n";
}
void f(double d)
{
cout << "B::f(" << d << ")\n";
}
void f(T)
{
cout << "B::f(T)\n";
}
}; class D1 :public B
{
public:
void f(int i)
{
cout << "D1::f(" << i << ")\n";
}
}; int main()
{
D1 d;
d.f();
d.f(4.9);//编译警告,会执行自动类型转换
//d.f();//被屏蔽,编译错误
//d.f(T());//被屏蔽,编译错误
//f()被重写,故无法访问基类中同名的成员函数;其成员函数会被屏蔽掉;
return ;
}

如果想要派生类中依然可以访问基类同名的成员函数,可以恢复基类中成员函数,方法如下:

在派生类中添加using B::f;就可以实现;

class D1 : public B
{
public:
using B::f;//使用using基类名::函数名;恢复基类函数
void f(int i) { cout << "D1::f(" << i << ")\n"; }
};

C++程序设计方法3:函数重写的更多相关文章

  1. C++程序设计方法4:函数模板

    函数模板 有些算法与类型无关,所以可以将函数的参数类型也定义为一种特殊的“参数”,这样就得到“函数模板” 定义函数模板的方法:template<typename T> 返回类型 函数名称( ...

  2. java基础疑难点总结之成员变量的继承,方法重载与重写的区别,多态与动态绑定

    1.成员变量的继承 1.1要点 子类用extends关键字继承父类.子类中可以提供新的方法覆盖父类中的方法.子类中的方法不能直接访问父类中的私有域,子类可以用super关键字调用父类中的方法.在子类中 ...

  3. java方法重载 与 重写

    class ChongZai{ public void a(int a); public void a(Strting a); public void a(int a,int b); } 如上就是一个 ...

  4. 《程序设计方法》【PDF】下载

    内容简介 <程序设计方法>主要以方法为主导,结合C语言,把程序设计方法学研究中若干成熟的理论和方法用通俗易懂的语言描述出来.<程序设计方法>还选取趣味性强.技巧性高.能够启发学 ...

  5. mooc- 基本程序设计方法week1,week2

    学习了第一单元我们几本可以写出10行左右的代码. week1:python编程之基本方法 1.从计算机到程序设计语言: 理解计算机:计算机是能够根据一组指令操作数据的机器. 功能性:可以进行数据计算 ...

  6. c++虚函数&重写

    虚函数是C++中实现多态的一种方法,父类A的一个函数声明为虚函数,在子类B中覆盖定义之后,当在调用的时候使用A*a=new B(),此时调用对应的那个虚函数的名字,则会执行B中的函数.当父类中没有定义 ...

  7. python 多态、多继承、函数重写、迭代器

    用于类的函数 issubclass(cls,class_or_tuple) 判断一个类是否继承自其他的类,如果此类cls是class或tuole中的一个派生(子类)则返回True,否则返回False ...

  8. Python全栈工程师(多继承、函数重写)

    ParisGabriel                每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图 Python人工智能从入门到精通 补充: 对象 --------- ...

  9. Objective-C学习笔记(二十二)——初始化方法init的重写与自己定义

    初学OC.对init这种方法不是非常了解.我们如今来分别对init方法进行重写以及自己定义,来加深对他的了解. 本样例也是用Person类来进行測试. (一)重写init方法. (1)在Person. ...

随机推荐

  1. 让Mysql支持Emoji表情,解决[Err] 1366 - Incorrect string value: '\xF0\xA3\x84\x83'

    mysql insert内容包含表情或者unicode码时候,插入Mysql时失败了,报如下异常: java.sql.SQLException: Incorrect string value: '\x ...

  2. [转] 前后端分手大师——MVVM 模式

    之前对 MVVM 模式一直只是模模糊糊的认识,正所谓没有实践就没有发言权,通过这两年对 Vue 框架的深入学习和项目实践,终于可以装B了有了拨开云雾见月明的感觉. Model–View–ViewMod ...

  3. Spring MVC基础知识整理➣国际化和异常处理

    概述 Spring框架为WEB项目提供了国际化以及异常处理机制.所谓的国际化也就是不同国籍,显示不同国籍的语言与符号.异常处理,也就是能够捕获WEB项目下的所有异常信息,并能处理记录这些异常信息机制. ...

  4. LibreOJ β Round #2

    题解: 都是不错的技巧题目 t1暴力就不说了 t2dp是比较显然的 然后发现都是0,1用bitset优化 代码非常短 t3容易发现这个东西在不断合并 于是我们想到启发式合并 存疑:splay启发式合并 ...

  5. python之PIL 二值图像处理和保存

    0. 1.参考 http://pszpcl.baike.com/article-77327.htmlwindows 图片右键:属性 详细信息 位深度位深度 用于指定图像中的每个像素可以使用的颜色信息数 ...

  6. 【Android】Bitmap加载图片错误 java.lang.OutOfMemoryError: bitmap size exceeds VM budget

    今天测试程序的时候出现下面的错误日志信息,程序当场挂掉 07-09 14:11:25.434: W/System.err(4890): java.lang.OutOfMemoryError: bitm ...

  7. python全栈开发day72-django之Form组件

    一.ajax 1. 复习JSON 1. JSON是什么? 一种数据格式,和语言无关的数据格式. 2. Python里面转换 1. Python对象 --> 字符串 import json 字符串 ...

  8. 【转】android:paddingLeft与android:layout_marginLeft的区别

    http://www.blogjava.net/anchor110/articles/342206.html 当按钮分别设置以上两个属性时,得到的效果是不一样的. android:paddingLef ...

  9. Codeforces 305E Playing with String 博弈

    我们可以把每段连续可以选的字符看成一个游戏, 那么sg[ i ]表示连续 i 个字符可选的sg值. 然后找找第一个就好啦. #include<bits/stdc++.h> #define ...

  10. 强大的图片展示插件,JQuery图片预览展示插件

    只需要引入JQuery.js , viewer.css 和 viewer.js <!DOCTYPE html> <html lang="en"> <h ...