C++类继承 继承后函数的值实现详解
类的继承会首先寻找基类,若基类未实现,则会寻找派生类的函数
1. class继承,函数不继承
#include <stdio.h> class Base { public: Base(){} ~Base(){} int a; void setA() { a = 1; } }; class A:public Base { public: A(){} ~A(){} void setA() { a = 2; } }; class B:public Base { public: B(){} ~B(){} void setA() { a = 3; } }; int main() { A *ax = new A(); B *bx = new B(); Base *aClass = ax; Base *bClass = bx; aClass->setA(); bClass->setA(); printf("a value of a %d\n", aClass->a); printf("a value of b %d\n", bClass->a); return 0; }
运行结果:
2. 函数和Class都继承
#include <stdio.h> class Base { public: Base(){} ~Base(){} int a; virtual void setA() { a = 1; } }; class A:public Base { public: A(){} ~A(){} virtual void setA() { a = 2; } }; class B:public Base { public: B(){} ~B(){} virtual void setA() { a = 3; } }; int main() { A *ax = new A(); B *bx = new B(); Base *aClass = ax; Base *bClass = bx; aClass->setA(); bClass->setA(); printf("a value of a %d\n", aClass->a); printf("a value of b %d\n", bClass->a); return 0; }
运行结果:注意派生类中可以不写virtual,最好写上,以辨别是函数继承
若将2中基类的函数写为纯虚函数,运行的结果一样,但是如果基类是纯虚函数,派生类必须实现相应的函数。
class Base { public: Base(){} ~Base(){} int a; virtual void setA()=0; };
3. 类A中不有函数,则继承自基类
class A:public Base { public: A(){} ~A(){} };
结果为:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
深入分析C++派生类中的保护成员继承
protected 与 public 和 private 一样是用来声明成员的访问权限的.由protected声明的成员称为"受保护的成员",或简称"保护成员".从类的用户角度来看,保护成员等价于私有成员.但有一点与私有成员不同,保护成员可以被派生类的成员函数引用. 如果基类声明了私有成员,那么任何派生类都是不能访问它们的,若希望在派生类中能访问它们,应当把它们声明为保护成员.如果在一个类中声明了保护成员,就意味着该类可能要用作基类,在它的派生类中会访问这些成员.
-
C++类继承之子类调用父类的构造函数的实例详解
C++类继承之子类调用父类的构造函数的实例详解 父类HttpUtil: #pragma once #include <windows.h> #include <string> using namespace std; class HttpUtil { private: LPVOID hInternet; LPVOID hConnect; LPVOID hRequest; protected: wchar_t * mHostName; short mPort; string send
-
C++中继承与多态的基础虚函数类详解
前言 本文主要给大家介绍了关于C++中继承与多态的基础虚函数类的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 虚函数类 继承中我们经常提到虚拟继承,现在我们来探究这种的虚函数,虚函数类的成员函数前面加virtual关键字,则这个成员函数称为虚函数,不要小看这个虚函数,他可以解决继承中许多棘手的问题,而对于多态那他更重要了,没有它就没有多态,所以这个知识点非常重要,以及后面介绍的虚函数表都极其重要,一定要认真的理解~ 现在开始概念虚函数就又引出一个概念,那就是重写(覆
-
深入解析C++中类的多重继承
C++类的多继承 在前面的例子中,派生类都只有一个基类,称为单继承.除此之外,C++也支持多继承,即一个派生类可以有两个或多个基类. 多继承容易让代码逻辑复杂.思路混乱,一直备受争议,中小型项目中较少使用,后来的 Java.C#.PHP 等干脆取消了多继承.想快速学习C++的读者可以不必细读. 多继承的语法也很简单,将多个基类用逗号隔开即可.例如已声明了类A.类B和类C,那么可以这样来声明派生类D: class D: public A, private B, protected C{ //类D新
-
C++/java 继承类的多态详解及实例代码
C++/java 继承类的多态详解 学过C++和Java的人都知道,他们二者由于都可以进行面向对象编程,而面向对象编程的三大特性就是封装.继承.多态,所有今天我们就来简单了解一下C++和Java在多态这方面的不同. 首先我们各看一个案例. C++ //测试继承与多态 class Animal { public: char name[128]; char behavior[128]; void outPut() { cout << "Animal" << endl
-
C++ 类的继承与派生实例详解
C++ 类的继承与派生实例详解 继承性是面向对象程序设计最重要的特性之一,使软件有了可重用性,C++提供的类的继承机制. 继承与派生的概念 一个新类从已有的类那里获得已有的特性,这种现象称为类的继承.同样也可以说成已有的类派生出来了新的类.类A继承自类B也就是类B派生了类A.所以继承和派生的关系就像小学时把字句和被字句的造句一样.有了继承与派生后,就有了父类/基类与子类/派生类,C++中将类B称为父类/基类,将类A称为子类/派生类. 派生类的声明: #include <iostream> u
-
详解C++中实现继承string类的MyString类的步骤
昨天师兄又出了道测试题,让我们实现类似于string类的没有MyString类,刚开始很头疼,可是真正在自己写代码的时候又很兴奋的发现,这个过程真的是个很宝贵的机会,让我又有机会可以很好的熟悉回顾C++的很多知识-类设计,构造析构函数,成员函数,友元函数,引用,重载,字符串操作,动态内存分布.....于是昨天花了半天时间写了300多行代码,并认真的进行了相关测试.修改和总结.因为内容有点丰富,所以想分几次写出来,条理也清楚些. 类的空间分配:类给它的每个对象都分配了独立的空间去存储它的数据成员,
-
C++类继承 继承后函数的值实现详解
类的继承会首先寻找基类,若基类未实现,则会寻找派生类的函数 1. class继承,函数不继承 #include <stdio.h> class Base { public: Base(){} ~Base(){} int a; void setA() { a = 1; } }; class A:public Base { public: A(){} ~A(){} void setA() { a = 2; } }; class B:public Base { public: B(){} ~B(){
-
python3中类的继承以及self和super的区别详解
python中类的继承: 子类继承父类,及子类拥有了父类的 属性 和 方法. python中类的初始化都是__init__().所以父类和子类的初始化方式都是__init__(),但是如果子类初始化时没有这个函数,那么它便调用父类的__init__():如果实现了这个函数,就会覆盖父类的初始化函数.如果继承父类的__init__(),就需要在子类中显示调用这个函数.实现如下: class Animal(object): def __init__(self): self.name = "我是父类&
-
JS继承与工厂构造及原型设计模式详解
目录 序言 正文 小结 序言 我们在前一篇文章<JS精粹,原型链继承和构造函数继承的 “毛病”> ,提到了:原型链继承.构造函数继承.组合继承: 在另一篇文章<蓦然回首,“工厂.构造.原型”设计模式,正在灯火阑珊处>,提到了:我们用于创建对象的三种设计模式:工厂设计模式.构造设计模式.原型设计模式: 至此,我们可以明显的感受到:JS 要实现面向对象(继承的能力),离不开这 3 种设计模式: 原型链 + 构造函数 = 组合继承 本篇带来一个新的继承方式:寄生继承,它由工厂模式和构造函
-
Android style的继承方式 点(.)和parent详解及实例
Android style的继承方式 点(.)和parent详解及实例 一.概述 通过继承机制,可以利用已有的style来定义新的style.所定义的新的style型不仅拥有新定义的item,而且还同时拥有旧的item.我们称已存在的用来派生新的style为父style.由新定义的style,又称为子style. 比如: <style name="pickprof_guide_text"> <item name="android:textSize&qu
-
Java 反射修改类的常量值、静态变量值、属性值实例详解
前言 有的时候,我们需要修改一个变量的值,但变量也许存在于 Jar 包中或其他位置,导致我们不能从代码层面进行修改,于是我们就用到了下面的场景,通过反射来进行修改变量的值. 定义一个实体类 class Bean{ private static final Integer INT_VALUE = 100; } 利用反射修改私有静态常量方法 System.out.println(Bean.INT_VALUE); Field field = Bean.class.getField("INT_VALUE
-
Python常用内置函数和关键字使用详解
目录 常用内置方法 查看所有的内置类和内置方法 标准输入输出 数学 序列 进制数转换 ASCII字符编码转换 其它 常用关键字 常见内置属性 常用内置方法 在Python中有许许多多的内置方法,就是一些Python内置的函数,它们是我们日常中经常可以使用的到的一些基础的工具,可以方便我们的工作. 查看所有的内置类和内置方法 # 方法一 built_list = dir(__builtins__) # 方法二 import builtins built_list = dir(builtins) 其
-
Python处理键映射值操作详解
目录 1. 问题背景 2. collections 概述 2.1 什么是collections 2.2 Collections 内部结构 2.3 collections 使用方法 3. defaultdict 方法 setdefault(),对字典key值赋默认值 defaultdict(),对字典进行查找取值 4. Counter 方法 总结 作为一个学完Python基础知识的测试,暗喜终于可以像RD们自己写脚本处理任何场景吧,如何优雅地写出来代码,接下来开启进阶版的Python. 本期浅谈一
-
Python中关于元组 集合 字符串 函数 异常处理的全面详解
目录 元组 集合 字符串 1.字符串的驻留机制 2.常用操作 函数 1.函数的优点: 2.函数的创建:def 函数名([输入参数]) 3.函数的参数传递: 4.函数的返回值: 5.函数的参数定义: 6.变量的作用区域 7.递归函数:函数体内套用该函数本身 8.将函数存储在模块中 9.函数编写指南: Bug 1.Bug常见类型 2.常见异常类型 3.python异常处理机制 pycharm开发环境的调试 编程思想 (1)两种编程思想 (2)类和对象的创建 元组 元组是不可变序列 多任务环境下,同时
-
C++类的构造与析构特点及作用详解
目录 一.类的构造函数 什么是构造函数 构造函数的特点 构造函数的作用 二.类的析构函数 什么是析构函数 析构函数的特点 小结 析构函数的作用 总结 构造函数 析构函数 一.类的构造函数 什么是构造函数 和类具有相同名称,并且没有返回值类型的函数,就是类的构造函数 概念模糊.直接举例: #include <stdio.h> #include <windows.h> struct Test { Test() // 和类具有相同的名.并且没有返回值 { } }; int main()
-
PHP中的函数声明与使用详解
函数 1. 函数名是标识符之一,只能有字母数字下划线,开头不能是数字: 函数名的命名,必须符合"小驼峰法则"FUNC(),func(),Func(); 函数名不区分大小写; 函数名不能与已有函数同名,不能与内置函数名同名: 2. function_exists("func");用于检测函数是否已经声明: 注意传入的函数名,必须是字符串格式,返回结果为true/false: echo打印时,true为1,false不显示: [ph
随机推荐
- XP打印共享四大问题及解决方法
- asp.net 操作XML 按指定格式写入XML数据 WriteXml
- Windows下用PyCharm和Visual Studio开始Python编程
- Python使用自带的ConfigParser模块读写ini配置文件
- 基于C语言sprintf函数的深入理解
- Android ViewDragHelper仿淘宝拖动加载效果
- 今天是星期几的4种JS代码写法
- IE7提供XMLHttpRequest对象为兼容
- 纯AJAX分页,V0.2版 下载+演示
- JavaScript组成、引入、输出、运算符基础知识讲解
- Javascript json object 与string 相互转换的简单实现
- Java编写计算器的常见方法实例总结
- JavaScript中的稀疏数组与密集数组[译]
- javascript 二维排序表格代码
- 反垃圾网站是全球性重任 关键在于积极协作
- Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
- C语言求两个字符串的最长公共子串
- Android 如何使用log4j及注意事项
- thinkPHP5框架数据库连贯操作之cache()用法分析
- PHP扩展mcrypt实现的AES加密功能示例