OOP 多态/虚函数
// main.cpp
// OOP
// 虚函数允许继承层次结构中绝大多数特定版本的成员函数被选择执行,虚函数使多态成为可能。
// Created by mac on 2019/4/8.
// Copyright © 2019年 mac. All rights reserved.
#include <iostream>
using namespace std;
class Class1{
public:
Class1(){}
~Class1(){}
virtual void f(){
cout<<"Function f() in Class1"<<endl;
}
void g(){
cout<<"Function g() in Calss1"<<endl;
}
private:
int a;
};
//写个类模版
template <class genType>
class genClass {
public:
genClass(){}
~genClass(){}
virtual void f(){
cout<<"Function f() in Class2"<<endl;
}
void g(){
cout<<"Function g() in Class2"<<endl;
}
private:
genType a;
};
class Class3{
public:
Class3(){}
~Class3(){}
//写个函数模版
template <class genType>
void h(genType a) {
cout<<"Function h() in Class3"<<endl;
}
private:
};
int main(int argc, const char * argv[]) {
Class1 object1,*p;
genClass<int> object2;
Class3 object3,*q=&object3;
p=&object1; //P指向object1
p->f();
p->g();
p=(Class1 *)&object2;// p指向object2 并且对类指针进行强制类型转换
p->f();
p->g();
p=(Class1*)&object3; //p指向object3 并且对类指针进行强制类型转换
//p->f();//编译成功,运行出错。
p->g(); // 输出: Function g() in Calss1
// p->h(); //编译出错,在Class1 中找不到h
//测试一下类Class3中的函数模版怎么用
q->h(3); // 输出: Function h() in Class3
q->h("jjjdscdjd"); // 输出: Function h() in Class3
return 0;
}
运行结果
Function f() in Class1
Function g() in Calss1
Function f() in Class2
Function g() in Calss1
Function g() in Calss1
Function h() in Class3
Function h() in Class3
Program ended with exit code: 0
Tips
- 对于编译器来说,是否在Class3中定义了h()并不重要(不管是否为虚函数)。
- 在C++中,动态绑定是通过将成员函数声明为virtual来实现的。
- 友元是一个不属于类成员的函数,但是他有权访问该类的私有成员,使用友元函数(friend)违背信息隐藏的原则。
OOP 多态/虚函数的更多相关文章
- C++ (P199—P211)多态 虚函数 抽象类
在介绍多态之前,先回忆:赋值兼容原则.虚基类.二义性.派生类如何给基类赋值等知识. 在赋值兼容原则中:父类对象的指针赋给基类的指针或者父类的对象赋给基类的引用,可以通过强转基类的指针或者引用变为父类的 ...
- 看懂下面C++代码才说你理解了C++多态虚函数!
#include <iostream> using namespace std ; class Father { private : virtual void Say() //只有添加 ...
- 多态&虚函数
(1).对象类型: a.静态类型:对象声明时的类型,编译的时候确定 b.动态类型:对象的类型是运行时才能确定的 class A {}; class B:pub ...
- C++继承-重载-多态-虚函数
C++ 继承 基类 & 派生类 一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数.定义一个派生类,我们使用一个类派生列表来指定基类.类派生列表以一个或多个基类命名,形式如下: ...
- c++学习之多态(虚函数和纯虚函数)
c++是面向对象语言,面向对象有个重要特点,就是继承和多态.继承之前学过了,就是一种重用类的设计方式.原有的类叫父类,或者基类,继承父类的类叫子类.在设计模式中,我们总是要避免继承,推荐用组合.因为继 ...
- C++: 多态 虚函数
一.多态: 1.多态是什么:具有不同功能的函数可以用同一个函数名 2.静态多态:程序编译时决定,通过函数重载实现. 3.动态多态:程序运行时决定,通过虚函数实现. 二.虚函数: 1.引入目的:可以通过 ...
- C++基础 (6) 第六天 继承 虚函数 虚继承 多态 虚函数
继承是一种耦合度很强的关系 和父类代码很多都重复的 2 继承的概念 3 继承的概念和推演 语法: class 派生类:访问修饰符 基类 代码: … … 4 继承方式与访问控制权限 相对的说法: 爹派生 ...
- 【C++基础】 多态 虚函数
多态:同样的消息被不同类型的对象接收时导致不同的行为.这里“消息”是对类的成员函数的调用,“行为”调用了不同的函数. 分类:①重载多态 ②包含多态……等 实现:编译时的多态 运行时的多态(动态绑定) ...
- C++ polymorphism Virtual Function 多态 虚函数
Polymorphism in C++ https://www.tutorialspoint.com/cplusplus/cpp_polymorphism.htm https://github.com ...
随机推荐
- Spring Boot—17MongoDB
在MongoDB中插入如下的数据 db.baike.insert( { _id: 'freemark', desc: '新一代模板语言', tag: [ 'IT', '模板语言' ], comment ...
- WPF ListView ListBox 常用的样式记录
ListView: <ListView x:Name="lvBlockedApps" ItemsSource="{Binding BlockedAppsCollec ...
- MySql 缓存查询原理与缓存监控 和 索引监控
MySql缓存查询原理与缓存监控 And 索引监控 by:授客 QQ:1033553122 查询缓存 1.查询缓存操作原理 mysql执行查询语句之前,把查询语句同查询缓存中的语句进行比较,且是按字节 ...
- android控件TextView之 分段显示不同颜色
代码如下: attrs.xml文件: 第二种方式: String newMessageInfo = "<font color='red'><b>" + 红色 ...
- Android微信支付—注意事项
坑点一:PayReq的参数 sign的生成 PayReq对象有个参数为packageValue 而sign生成时要用到packageValue,但是对应的Key是package,这里的key容易弄错 ...
- Oracle获取session的trace
1. 使用参数SQL_TRACE 下面是官网对此参数的说明 SQL_TRACE Property Description Parameter type Boolean Default value fa ...
- SQL server数据库压缩空间
SQL server数据库,在手动删除或者自动删除数据后,查看数据库物理文件发现占用空间并没有释放,果断采用万能的重启.(反正是自己用的一个服务器,随便玩.如果不是只有自己用的服务器,还是建议让运维或 ...
- extjs 可视化开发工具
不清楚Ext可视化的可以看一下http://www.screencast.com/users/JackSlocum这里的三个视频哈. 安装和汉化的步骤 第一步下载:Ext需要支持AIR的支持 下载并安 ...
- NSOperation的使用细节 [2]
NSOperation的使用细节 [2] 这一节我们来写自定义nonconcurrent的operation,自定义nonconcurrent的operation很简单,重写main方法,之后处理好c ...
- 【matlab】 拉格朗日插值
第一个函数 "lagrange1.m" 输入:X Y 与点x0 输出:插值函数对应函数值 y0 function y = lagrange1(X,Y,x0) n = length ...