纯虚函数 与 含有虚函数的析构 (虚析构)
来源:互联网 发布:嫁给程序员好吗 编辑:程序博客网 时间:2024/06/15 15:14
纯虚函数 与 含有虚函数的析构 (虚析构)
主函数:
#include "stdafx.h"#include <iostream>using namespace std;#include "Dog.h"#include "Cat.h"# if 0----纯虚函数的声明: virtual 函数声明 = 01.只有声明,没有实现体 = 0仅仅只是语法表现形式2.含有纯虚函数的类 叫抽象基类 不能实例化(不能生成对象)3.仅仅是为了提供族类的接口 java 中 称此种类为 Interface4.如果子类中没有覆写纯虚函数,那子类也为抽象基类 也不能实例化5.如果子类只是把父类的纯虚函数原封不动拿到内部声明,语法也通不过,拿下来就必须覆写,要不然就不拿凡是含有虚函数的类,析构函数也应该声明为虚函数,才可以实现完整的析构 delete 父类的指针,要实现同时调用父子类的析构不虚的话只调用了父类的析构函数----成为虚函数的限制1)只有类的成员函数才能声明为虚函数虚函数仅适用于有继承关系的类对象,所以普通函数不能声明为虚函数。2)静态成员函数不能是虚函数静态成员函数不受对象的捆绑,只有类的信息。3)内联函数不能是虚函数4)构造函数不能是虚函数构造时,对象的创建尚未完成。构造完成后,才能算一个名符其实的对象。构造函数同时承担着虚函数表的建立,没有对象的时候,虚函数没有意义5)析构函数可以是虚函数且通常声明为虚函数#endifint _tmain(int argc, _TCHAR* argv[]){//Dog g;////g.voice();//Cat c;////c.voice();//Animal *pa = &g;//pa->voice();//pa = &c;//pa->voice();//Animal a; 抽象基类不能实例化cout << "==================" << endl;Animal* p = new Dog;p->voice();delete p;//p = new Cat;//p->voice();return 0;}
Animal.h
#pragma once#include <iostream>using namespace std;class Animal{public:Animal();virtual ~Animal(); //需要加virtual实现完整的析构virtual void voice() = 0; //纯虚函数};
Animal.cpp
#include "Animal.h"Animal::Animal(){cout << "Animal::Animal()" << endl;}Animal::~Animal(){cout << "Animal::~Animal()" << endl;}
Dog.h
#pragma once#include <iostream>using namespace std;#include "Animal.h"class Dog:public Animal{public:Dog();virtual ~Dog();virtual void voice();};
Dog.cpp
#include "Dog.h"Dog::Dog(){cout << "Dog::Dog()" << endl;}Dog::~Dog(){cout << "Dog::Dog()" << endl;}void Dog::voice(){cout << " wang wang wang wang " << endl;}
Cat.h
#pragma once#include <iostream>using namespace std;#include "Animal.h"class Cat:public Animal{public:Cat();virtual ~Cat();virtual void voice();};
Cat.cpp
#include "Cat.h"Cat::Cat(){cout << "Cat::Cat()" << endl;}Cat::~Cat(){cout << "Cat::~Cat()" << endl;}void Cat::voice(){cout << " miao miao miao miao " << endl;}
阅读全文
0 0
- 纯虚函数 与 含有虚函数的析构 (虚析构)
- 含有纯虚函数的例子
- 虚函数与纯函数的区别
- 虚函数与纯虚函数&构造函数与析构函数
- 虚函数、纯虚函数、虚函数与析构函数
- 纯虚函数之析构函数
- 空的虚函数与纯虚函数的区别
- 纯虚函数与虚基类
- 纯虚函数与纯虚类
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 为什么神经网络会把乌龟识别成步枪?现在的 AI 值得信任吗?
- 腾讯云centos7.2安装MySQL5.5
- 深度学习的核心:掌握训练数据的方法
- 高数 07.06 多元函数的极值及其求法
- Spring学习(3)--Bean之间的关系
- 纯虚函数 与 含有虚函数的析构 (虚析构)
- 为什么 Linux 不需要碎片整理
- 在ibatis 使用 in 语句进行查询的几种方案
- 高数 07.07 二重积分的概念与性质
- [LeetCode] Binary Tree Zigzag Level Order Traversal
- Date .Calendar,SimpleDteFormate的使用
- LeetCode 414.Third Maximum Number
- 高数 07.08 二重积分的计算
- 数据链路层