-
接口类:
仅含有纯虚函数的类称为接口类
(没有数据成员,只有成员函数,成员函数是纯虚函数)
查看全部 -
继承自抽象类的纯虚函数,如果在子类中进行实现,那么子类就可以实例化
查看全部 -
含有纯虚函数的类叫做抽象类
查看全部 -
之前的知识:
虚函数和虚函数表
学习:
纯虚函数:定义方式
查看全部 -
析构函数的执行顺序:
先执行子类的的析构函数,继而会执行父类的析构函数
查看全部 -
函数的覆盖:
子类中定义了和父类同名的虚函数,此时发生了覆盖
查看全部 -
虚函数表:
实现是 派生类中的虚函数覆盖了基类中虚函数指向的虚函数表中虚函数指针的地址,重新指向派生类中的虚函数,而非基类中的同名虚函数
查看全部 -
内存泄漏:
在析构函数中加入virtual关键字
virtual 关键字修饰函数的限制:
不能修饰普通函数,其修饰的函数必须是某个类的成员函数
不能修饰静态成员函数(静态成员函数其实不属于任何一个类)
不能修饰内联函数
不能修饰构造函数
查看全部 -
谢谢你了:
在实例化对象时,如果是在栈中实例化,则在后面调用函数的时候使用取地址符号&;若是在堆中实例化,则后面调用函数的时候无需使用&,变量名本身已经是一个地址。
CanShut *gun = new Gun();//堆中 //Gun gun;//栈中 // 调用含参函数hunting,将对象枪传入函数中 hunting(gun);//堆中
查看全部 -
void flyMatch(Flyable *a,Flyable *b)//飞行比赛
//要求传入一个会飞对象的指针,此时鸟类的对象指针可以传入进来
{
....
a->takeoff();
b->takeoff();
a->land();
b->land();查看全部 -
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;/**
* 定义动物类:Animal
* 成员函数:eat()、move()
*/
class Animal
{
public:
// 构造函数
Animal(){cout << "Animal" << endl;}
// 析构函数
virtual ~Animal(){cout << "~Animal" << endl;}
// 成员函数eat()
virtual void eat(){cout << "Animal -- eat" << endl;}
// 成员函数move()
virtual void move(){cout << "Animal -- move" << endl;}
};/**
* 定义狗类:Dog
* 此类公有继承动物类
* 成员函数:父类中的成员函数
*/
class Dog : public Animal
{
public:
// 构造函数
Dog(){cout << "Dog" << endl;}
// 析构函数
virtual ~Dog(){cout << "~Dog" << endl;}
// 成员函数eat()
virtual void eat(){cout << "Dog -- eat" << endl;}
// 成员函数move()
virtual void move(){cout << "Dog -- move" << endl;}
};int main(void)
{
// 通过父类对象实例化狗类
Animal *p = new Dog();
// 调用成员函数
p->eat();
p->move();
// 释放内存
delete p;
p = NULL;
return 0;
}查看全部 -
函数的隐藏:子类中有与父类同名的函数
函数的覆盖:子类中有与父类同名的虚函数
查看全部 -
静态多态:早绑定 --->函数重载 在编译时就已经确定调用哪个函数
动态多态:晚绑定 --->继承类间的同名函数调用,当父类指针指向子类对象时,在运行时才判定调用的是子类中的同名函数,而非父类
查看全部 -
多态定义:
查看全部 -
普通虚函数
虚析构函数
纯虚函数:抽象类和接口类
RTTi:运行时类型识别
异常处理
查看全部
举报