//  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)违背信息隐藏的原则。

最新文章

  1. C# Delete Url Cookie
  2. docker1.12 安装redis第三方集群方案 codis
  3. php数组去重复代码
  4. git的安装使用和代码自动部署
  5. mac 下对 iterm 终端 设置代理
  6. xps文档打印后winform界面文字丢失
  7. JDK/bin目录下的不同exe文件的用途(转)
  8. js中的一元运算符
  9. 机器人局部避障的动态窗口法(dynamic window approach) (转)
  10. [Codeforces]849E Goodbye Souvenir
  11. codeforces559B
  12. ubuntu下设置mysql自启
  13. (转)python requests 高级用法 -- 包括SSL 证书错误的解决方案
  14. 20145330 《网络对抗》 Web安全基础实践
  15. idea引入svn
  16. sqlserver sp_spaceused用法
  17. C#操作GridView控件
  18. win10里如何在中文输入法里添加美式键盘
  19. 获取数组中多个相加等于0的一组数字 javascript
  20. Spring学习【Spring概述】

热门文章

  1. Spring 框架学习—控制反转(IOC)
  2. JS实现点击参数面板按钮显示或隐藏数据
  3. Latex 数学公式使用入门
  4. h5调用微信分享
  5. CSS3 响应式web设计,CSS3 Media Queries
  6. Azure 镜像市场发布商指南
  7. Oracle EBS 查询物料报错
  8. [VS2008] [.NET 3.5] 如何解决 The imported project &quot;C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CompactFramework.CSharp.targets&quot; was not found
  9. 解决 There are no resources that can be added or removed from the server
  10. asar 如何解密加密?electron 的 asar 的具体用法