纯虚函数

抽象基类、访问控制与继承和继承中的类作用域

我是研究僧i 提交于 2020-03-17 04:30:23
抽象基类 一个基类是抽象基类,它的虚函数必须是一个 纯虚函数 。纯虚函数是虚函数后加 =0 来定义的, =0 只能出现在虚函数的类内声明之后 : class Disc_quote : public Quote { public: Disc_quote() = default; Disc_quote(const std::string& book, doule price, size_t qty, double disc) : Quote(book, price), quantity(qty), discount(disc) {} // 纯虚函数 double net_price(size_t) const = 0; protected: size_t quantity = 0; double discount = 0.0; }; 抽象基类的定义:含有或者继承了纯虚函数(未覆盖)的类是一个抽象基类。 1. 抽象基类只负责定义接口; 2. 不能定义抽象基类的对象; 3. 一般来说,为纯虚函数提供定义是没有意义的, 毕竟在派生类中可能要覆盖该虚函数。也可以为这个纯虚函数提供定义,不过定义不能出现在类内; 4. 抽象基类的派生类必须将纯虚函数override, 否则该派生类也是一个抽象基类。 访问控制与继承 受保护的成员的访问控制

C++使用纯虚函数的接口封装以及接口的调用方法

依然范特西╮ 提交于 2020-02-24 05:04:48
C++使用纯虚函数的接口封装以及接口的调用方法 受疫情的影响,本研狗最近一直在家养老,但是,实验室那边的项目突然压下来了,无奈,只好云办公呗。给的任务是对我之前完成的项目做一个封装,对外部提供接口使用。这**就涉及到我知识的盲区了呀,时间还催的挺紧,只好这两天边学边做,终于肝出来了一个初步的成果,做好了空的原型库定义,加上了要求的输入输出参数,封装成了接口。然后想着趁着热乎劲,赶紧把方法总结下来,遂发布了这篇文章,供大家参考,也给以后自己再写类似接口的时候当参考。 首先说一下为什么要用到纯虚函数,主要是因为要向用户提供接口,又不希望暴露太多的信息,于是在对外部发布的头文件里定义的方法都是纯虚的,也不包含私有方法和属性,而其具体实现以及成员变量由内部封装的库来实现。简单来说,就是要发布的外部文件定义抽象类当作父类,其内部子类继承父类,提供具体实现。 下面我整了一个很简单的小例子来说明这个是如何实现的,例子是调用opencv实现图片的水平翻转和灰度化操作。 小例子的代码均已上传到github: 传送门 库的封装 首先,是对外发布的接口文件image_processing.h,如下所示。 // ------------------image_processing.h------------------ // 这个是对外发布的接口,这个文件里只包含对外提供的方法,不会包含私有方法和属性 #

一点点

孤人 提交于 2020-02-17 02:44:13
静态,静态的意义是只初始化一次,因为静态全局变量只能在一个文件中使用。 而普通的全局变量则可以在多个文件中使用。 200w相机的ip是243 500w相机的ip是244 纯虚函数是为了说明基类是一个接口,基类不做实现。 虚函数是为了说明,基类已经做了一个缺省实现,但是这种行为具备一定的危险性----就是一些需要自定义的方法,不了解的人也用缺省性行为完成。 那么就需要纯虚函数提供实现,以让子类明确调用-----这样一来,以纯虚函数是为了说明基类是一个接口矛盾了? 而非虚函数则是为派生类提供一种强制性的实现。 Navigating the current page: ? show the help dialog for a list of all available keys h scroll left j scroll down k scroll up l scroll right gg scroll to top of the page G scroll to bottom of the page d scroll down half a page u scroll up half a page f open a link in the current tab F open a link in a new tab r reload gs view source zi zoom in

018_linuxC++之_抽象类的引入

非 Y 不嫁゛ 提交于 2020-02-12 18:44:13
(一)参考原文链接: C++多态 (二) 抽象类 在介绍抽象类之前,我们先介绍一下纯虚函数。 1.纯虚函数 在基类中仅仅给出声明,不对虚函数实现定义,而是在派生类中实现。这个虚函数称为纯虚函数。普通函数如果仅仅给出它的声明而没有实现它的函数体,这是编译不过的。纯虚函数没有函数体。 纯虚函数需要在声明之后加个=0; class <基类名> { virtual <类型><函数名>(<参数表>)=0; ...... }; 2.抽象类 含有纯虚函数的类被称为抽象类。抽象类只能作为派生类的基类,不能定义对象,但可以定义指针。在派生类实现该纯虚函数后,定义抽象类对象的指针,并指向或引用子类对象。 1)在定义纯虚函数时,不能定义虚函数的实现部分; 2)在没有重新定义这种纯虚函数之前,是不能调用这种函数的。 抽象类的唯一用途是为派生类提供基类,纯虚函数的作用是作为派生类中的成员函数的基础,并实现动态多态性。继承于抽象类的派生类如果不能实现基类中所有的纯虚函数,那么这个派生类也就成了抽象类。因为它继承了基类的抽象函数,只要含有纯虚函数的类就是抽象类。纯虚函数已经在抽象类中定义了这个方法的声明,其它类中只能按照这个接口去实现。 3.接口和抽象类的区别 1)C++中我们一般说的接口,表示对外提供的方法,提供给外部调用。是沟通外部跟内部的桥梁。也是以类的形式提供的,但一般该类只具有成员函数,不具有数据成员

微软Visual Studio \"14\" CTP 2 发布

旧街凉风 提交于 2020-02-10 02:54:52
对于在微软阵营下进行工作的团队来说,拥有最新版本的Visual Studio是提高效率最佳的选择,没有之一。 在本文中,我们就上个月发布的Visual Studio "14" CTP1和昨天发布的Visual Studio "14" CTP2进行详细发布说明梳理,供大家餐食: (一) Visual Studio "14" CTP 2版本: 微软于2014年7月8日发布了Visual Studio 14 (新Visual Studio版本的代号)的CTP 2 版本。除了保留在CTP1版本中添加的新功能外,CTP2 还包括如下亮点: 保存和自定义IDE 布局: 可以在IDE中为工具窗口保存和应用自定义布局。保存窗口布局和应用窗口布局命令在窗口菜单下,还可以通过管理窗口布局重命名、重新排序和删除布局。 Light Bulb Editor Adornment: 灯泡是可以识别和帮助您解决代码中问题的可扩展编辑器装饰。将插入符插入到有问题的一行代码中或悬浮在上面,您会看到一个灯泡图标,显示了解决这个问题的方法列表,甚至提供给您解决方案的预览。非常酷。 支持编辑器手势识别: Visual Studio编辑器现在支持触控手势,包括滚动、双指缩放、环境菜单的对象选择、双击选择单词和轻击边缘选择行。 VC++属性页面和编辑器增强: 更新了VC++属性页面对话框的配置和平台下拉列表值

C++ 纯虚函数和抽象类(自学笔记,可能有错)

陌路散爱 提交于 2020-02-05 10:54:46
什么是纯虚函数 (1) 纯虚函数是一个 在基类中说明 的虚函数,在 基类中没有定义 ,要求任何派生类都定义自己的版本。 (2) 纯虚函数为各派生类提供一个 公共界面 (接口的封装和设计、软件的模块功能划分) (3) 纯虚函数说明形式: virtual 类型 函数名(参数表) = 0; (4)一个具有纯虚函数的基类被称为 抽象类 引入纯虚函数的原因 (1) 为了方便使用多态特性,我们常常需要在基类中定义虚函数。 (2) 在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。 为了解决上述问题,引入了纯虚函数的概念,即 将函数定义为纯虚函数。 抽象类 (1) 抽象类 不能实例化 但可以 创建 一个抽象类的 指针或是引用, 抽象类不能作为返回类型、参数类型。 (2) 除非在派生类中完全实现基类中所有的的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。 在派生类实现该纯虚函数后,定义抽象类对象的指针,并指向或引用子类对象。 (3) 抽象类 的 唯一用途 是为派生类 提供基类 ,纯虚函数的作用是作为派生类中的成员函数的基础,并实现动态多态性。 #include <iostream> using namespace std; class father// 拥有纯虚函数,因此这个类成为了抽象类 { public:

C++学习笔记第三天:类、虚函数、双冒号

断了今生、忘了曾经 提交于 2020-01-23 09:16:36
类 class Box { public: double length; // 盒子的长度 double breadth; // 盒子的宽度 double height; // 盒子的高度 }; 类成员的作用域: public:公共成员。访问权限:外部、子类、本身 protected:受保护成员。访问权限:子类、本身 private:私有成员。访问权限:本身 构造函数 跟其他语言一样,使用类名作为函数名,无返回值,可以有参数。 #include <iostream> using namespace std; class Line { public: void setLength( double len ); double getLength( void ); Line(); // 这是构造函数 private: double length; }; // 成员函数定义,包括构造函数 Line::Line(void) { cout << "Object is being created" << endl; } void Line::setLength( double len ) { length = len; } double Line::getLength( void ) { return length; } // 程序的主函数 int main( ) { Line line; //

重拾C++之虚函数和虚基类以及抽象类

霸气de小男生 提交于 2019-12-24 14:09:47
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、引言 好久没接触过C++了,今天突然要用一点感觉号蛋疼,用惯了python感觉C++一点都不会了。 声明了一个类的对象居然用这种方法,脑子绝对是被驴(python)踢了 class A{ ... } a=A();//尼玛这都能行,被踢大了 二、虚函数和一般函数 虚函数就是加了vritual关键字的函数,引入虚函数的目的是为了实现多态性(在此为运行时的多态性),即可以通过父类的指针调用子类的对象,从而产生不同的效果。 virtual void show(){ cout<<"hello my name is a"<<endl; } 废话不多说,为了展示虚函数和一般函数的区别看看下面一个个例子: #include<iostream> using namespace std; class A{ private: int a; int b; public: A(int a,int b){ this->a=a; this->b=b; cout<<"hello base A"<<endl; cout<<a<<'-'<<b<<endl; } //定义一个虚函数 virtual void show(){ cout<<"hello my name is a"<<endl; } }; class D:public A{

关于纯虚函数

自古美人都是妖i 提交于 2019-12-24 14:05:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> #include "stdafx.h" #include<iostream>    using namespace std; //1.一个类中可以声明一个或多个纯虚函数,只要有纯虚函数的类就是抽象类 //2.抽象类只能作为其他类的基类,不能用来建立对象,又称抽象基类 //3.如果派生类只是简单地继承了抽象类的纯虚函数,而没有重新定义基类的纯虚函数,则派生类也是一个抽象类 class A{ public: virtual void fun() = 0; //纯虚函数 }; class B:public A{ public: void fun(){cout<<"实现纯虚函数的定义成功"<<endl;} //重写基类纯虚函数 }; //只有派生类与基类的虚函数具有完全相同的函数名、返回类型以及参数表,才能实现虚函数的特性 class C:public A{ public: void fun(int i){cout << "fun(int i)并不是基类纯虚函数fun()的实现版本"<<endl;} }; //PS:以下两种声名没有区别 int *i,j = NULL; int* p,q = NULL; int _tmain(int argc, _TCHAR* argv[]) { cout << i << endl;

C++ 关于抽象类和纯虚函数

一个人想着一个人 提交于 2019-12-24 04:13:18
纯虚函数的概念: 纯虚函数是一个在基类(父类)中声明的虚函数,在父类中没有任何定义,要求所有的派生类(子类)都定义自己的版本。 纯虚函数为子类提供了一个公共界面(即接口)。 抽象类的概念: 用于一个或多个纯虚函数的基类(父类)称为抽象类。 抽象类和普通类的区别: 抽象类不可以创建对象,普通类可以创建对象性 如果一个子类继承抽象类,需要重写抽象类里的纯虚函数,如果不重写的话,这个子类仍为抽象类。 父类中有多个纯虚函数,子类如果想可以实例化,必须把所有的纯虚函数都重写才可以 纯虚函数定义: void virtual show ( ) = 0 ; //纯虚函数 来源: CSDN 作者: Dr_W 链接: https://blog.csdn.net/qq_42363032/article/details/103641189