OOP 多态/虚函数
2024-09-04 11:50:04
// 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)违背信息隐藏的原则。
最新文章
- C# Delete Url Cookie
- docker1.12 安装redis第三方集群方案 codis
- php数组去重复代码
- git的安装使用和代码自动部署
- mac 下对 iterm 终端 设置代理
- xps文档打印后winform界面文字丢失
- JDK/bin目录下的不同exe文件的用途(转)
- js中的一元运算符
- 机器人局部避障的动态窗口法(dynamic window approach) (转)
- [Codeforces]849E Goodbye Souvenir
- codeforces559B
- ubuntu下设置mysql自启
- (转)python requests 高级用法 -- 包括SSL 证书错误的解决方案
- 20145330 《网络对抗》 Web安全基础实践
- idea引入svn
- sqlserver sp_spaceused用法
- C#操作GridView控件
- win10里如何在中文输入法里添加美式键盘
- 获取数组中多个相加等于0的一组数字 javascript
- Spring学习【Spring概述】
热门文章
- Spring 框架学习—控制反转(IOC)
- JS实现点击参数面板按钮显示或隐藏数据
- Latex 数学公式使用入门
- h5调用微信分享
- CSS3 响应式web设计,CSS3 Media Queries
- Azure 镜像市场发布商指南
- Oracle EBS 查询物料报错
- [VS2008] [.NET 3.5] 如何解决 The imported project ";C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CompactFramework.CSharp.targets"; was not found
- 解决 There are no resources that can be added or removed from the server
- asar 如何解密加密?electron 的 asar 的具体用法