//  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 多态/虚函数的更多相关文章

  1. C++ (P199—P211)多态 虚函数 抽象类

    在介绍多态之前,先回忆:赋值兼容原则.虚基类.二义性.派生类如何给基类赋值等知识. 在赋值兼容原则中:父类对象的指针赋给基类的指针或者父类的对象赋给基类的引用,可以通过强转基类的指针或者引用变为父类的 ...

  2. 看懂下面C++代码才说你理解了C++多态虚函数!

    #include <iostream> using namespace std ; class Father { private :  virtual void Say()  //只有添加 ...

  3. 多态&虚函数

     (1).对象类型:           a.静态类型:对象声明时的类型,编译的时候确定           b.动态类型:对象的类型是运行时才能确定的 class A {}; class B:pub ...

  4. C++继承-重载-多态-虚函数

    C++ 继承 基类 & 派生类 一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数.定义一个派生类,我们使用一个类派生列表来指定基类.类派生列表以一个或多个基类命名,形式如下: ...

  5. c++学习之多态(虚函数和纯虚函数)

    c++是面向对象语言,面向对象有个重要特点,就是继承和多态.继承之前学过了,就是一种重用类的设计方式.原有的类叫父类,或者基类,继承父类的类叫子类.在设计模式中,我们总是要避免继承,推荐用组合.因为继 ...

  6. C++: 多态 虚函数

    一.多态: 1.多态是什么:具有不同功能的函数可以用同一个函数名 2.静态多态:程序编译时决定,通过函数重载实现. 3.动态多态:程序运行时决定,通过虚函数实现. 二.虚函数: 1.引入目的:可以通过 ...

  7. C++基础 (6) 第六天 继承 虚函数 虚继承 多态 虚函数

    继承是一种耦合度很强的关系 和父类代码很多都重复的 2 继承的概念 3 继承的概念和推演 语法: class 派生类:访问修饰符 基类 代码: … … 4 继承方式与访问控制权限 相对的说法: 爹派生 ...

  8. 【C++基础】 多态 虚函数

    多态:同样的消息被不同类型的对象接收时导致不同的行为.这里“消息”是对类的成员函数的调用,“行为”调用了不同的函数. 分类:①重载多态 ②包含多态……等 实现:编译时的多态  运行时的多态(动态绑定) ...

  9. C++ polymorphism Virtual Function 多态 虚函数

    Polymorphism in C++ https://www.tutorialspoint.com/cplusplus/cpp_polymorphism.htm https://github.com ...

随机推荐

  1. JSON学习笔记-2

    JSON的语法 1.JSON 数据的书写格式是:名称/值对. "name" : "我是一个菜鸟" 等价于这条 JavaScript 语句: name = &qu ...

  2. Java设计模式----初识适配器模式

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  3. C#代码实现在控制台输入密码显示星号

    在控制台输入的内容C#默认按照字符串进行处理,如果直接让用户一次输入完毕就很难实现 显示星号的功能.但是如果让用户一次只能输入一个字符就,在将用户输入的字符替换为星号就可以实现了! 首先,C#中能让用 ...

  4. MongoDB 安装和使用问题总结

    1. 一直安装不了[一直next下去但最后没有发现生成文件夹] 去掉 Installing MongoDB Compass 前面的打勾 2. 需要开两个cmd运行mongodb 开第一个,输入以下运行 ...

  5. Linux ip命令详解

    ip命令式用来配置网卡ip信息的命令,且是未来的趋势,重启网卡后IP失效 ip常见命令参数 Usage: ip [ OPTIONS ] OBJECT { COMMAND | help } ip [ - ...

  6. September 21st 2017 Week 38th Thursday

    What fire does not destroy, it hardens. 烈火摧毁不了的东西,只会变得更坚固. The true gold can stand the test of fire, ...

  7. 函数的应用 "注册" and "登录"

    登录 自己写 # 注册 registdef regist(): f = open("account", mode="r+", encoding="ut ...

  8. 【FLEX教程】#008 开发中的问题笔记(慢更…)

    在这里记录一下个人在FLEX开发中遇到的一些问题.方便一些遇到同样问题的朋友们,能够快速的解决这些问题. 这篇笔记我会慢慢的更新,(PS:有遇到问题就往上面更….) 2015年1月4日 12:53:5 ...

  9. 【转】.NET Core基于. csproj 配置文件发布项目

    一.前言 .NET工具链在最新的Preview3版本中,引入了新的MSBuild项目系统,项目文件又回归了.csproj的XML文件来管理,项目文件.包引用.程序集引用..NET Core工具集.发布 ...

  10. Scala学习——Brief Scala Tutorial

    因为Spark项目需要,学习Scala编程. 从官网文档入手:http://www.scala-lang.org/documentation/ 首先从他的Older Documentation入手. ...