UE4-C++核心编程之接口---C++中的接口
来源:互联网 发布:杭州明霖 知乎 编辑:程序博客网 时间:2024/06/13 04:09
接口的出现使面向对象前进了一大步,同时也是很多需求变得有预见性,尤其是接口与继承结合起来使得程序有了“预见未来”的能力。
---Mantra
什么是接口?
接口就是自己提供给外界的一种抽象,用以由内部操作分离出外部沟通的方法,使其内部修改而不影响外界其他实体与交互的方式。
很多编程语言都提供了对于接口的支持,但是很不幸,C++本身不支持接口。但是我们可以通过C++多继承和纯虚函数结合来实现接口。
具体操作方法:
此处略去理论直接上砖(代码)。首先定义IPerson接口,定义了一些行为(纯虚函数)
#pragma once#include <string>class IPerson{public:IPerson() {};// 此处最好规定为纯虚函数,这样可以保证子类能够正确调用析构函数virtual ~IPerson() = 0{};// 以下为定义的接口函数,方便外部调用virtual void SetName(const std::string& strName) = 0;virtual const std::string GetName() = 0;virtual void Work() = 0;};接下来我们定义两个类,分别实现这个IPerson接口。
首先定义Teacher类(下面分别是.h和.cpp文件):
#pragma once#include <string>#include "IPerson.h"class Teacher:public IPerson{public:Teacher();Teacher(std::string name);virtual ~Teacher();// 通过 IPerson 继承virtual void SetName(const std::string & strName) override;virtual const std::string GetName() override;virtual void Work() override;protected:std::string strName;};
#include "Teacher.h"#include <iostream>Teacher::Teacher(){}Teacher::Teacher(std::string name){strName = name;}Teacher::~Teacher(){std::cout << "Delete Teacher: " << this->strName << std::endl;}void Teacher::SetName(const std::string & strName){this->strName = strName;}const std::string Teacher::GetName(){return this->strName;}void Teacher::Work(){std::cout << "I'm teaching Student" << std::endl;}
接下来定义和实现Student类,同样也实现了IPer'son接口
#pragma once#include "IPerson.h"#include <string>class Student: public IPerson{public:Student();Student(std::string name);~Student();// 通过 IPerson 继承virtual void SetName(const std::string & strName) override;virtual const std::string GetName() override;virtual void Work() override;protected:std::string strName;};
#include "Student.h"#include <iostream>Student::Student(){}Student::Student(std::string name){strName = name;}Student::~Student(){std::cout << "Delete Student: " << this->strName << std::endl;}void Student::SetName(const std::string & strName){std::cout << "Change Student name from " << this->strName << " to "<< strName<<std::endl;this->strName = strName;}const std::string Student::GetName(){std::cout << "You wana get the student name? " << std::endl;std::cout << "But do you have the right...." << std::endl;std::cout << "Em... You have" << std::endl;std::cout << this->strName << std::endl;return this->strName;}void Student::Work(){std::cout << "I'm a goodboy, and I have to study." << std::endl;std::cout << "So my work is Studying" << std::endl;}接下来在主函数中测试我们写好的程序(其中Headers.h包含了必要的头文件)
#include <iostream>#include "Headers.h"using namespace std;int main(){cout << "Hello World" << endl;// 测试自己写的接口(利用多态)IPerson* Person = new Teacher("Mantra");std::cout << Person->GetName() << std::endl;Person->SetName("MantraGuo");std::cout << Person->GetName() << std::endl;Person->Work();std::cout << "====================================" << std::endl;std::cout << std::endl;std::cout << "华丽的分割线" << std::endl;std::cout << "====================================" <<std::endl;std::cout << std::endl;Person = new Student("NaDaCi");std::cout << Person->GetName() << std::endl;Person->SetName("MantraGuo");std::cout << Person->GetName() << std::endl;Person->Work();return 0;}
一切准备就绪,接下来就是测试啦,结果如下:
最后附上测试用的VS工程。链接:http://pan.baidu.com/s/1i4YMsJj密码:21fl。
阅读全文
0 0
- UE4-C++核心编程之接口---C++中的接口
- UE4-C++核心编程之接口:接口在蓝图中的使用
- UE4之蓝图接口
- C语言面向对象编程之四:面向接口编程
- DBus 的 C 编程接口
- C++builder 中的接口类
- MPI编程函数接口(C/C++)
- C#-接口
- C#-接口
- C#:接口
- C#-接口
- c#-接口
- C#---接口
- [C#] 白话C#:接口
- Hibernate中的核心接口query接口用法
- Hibernate中的核心接口query接口用法
- SQLite3 C/C++编程接口介绍
- SQlite3中级篇(C/C++编程接口)
- Java高级篇-2-装箱和拆箱的基本概念
- 项目总结:石头剪刀布小游戏
- ACM所有算法
- 分组背包
- Leetcode:303. Range Sum Query
- UE4-C++核心编程之接口---C++中的接口
- 重磅:传ARM生态系统负责人Leon离职创业,疑投身VR
- 流畅度秒杀苹果:vivo Xplay5视频曝光“黑科技”智慧引擎
- 上下曲面!vivo Xplay5正面曝光 全球首款6GB运存跑分超16万
- QQ浏览器带来的竞争启示:如何让用户在入口被“黏住”
- 工信部和国家空管法领导考察FLYPRO飞豹无人机,监管法案或将出台
- 虚拟机非正常关闭的解决方案
- GCC源码
- 机器学习理论篇之线性回归(python实现)