抽象类的一般规范
.h文件
#ifndef CLASSNAME_H
#define CLASSNAME_H
class ClassNamw{
//
// 省略其他逻辑代码
//
//
public:
virtual void showInfo()=0;//纯虚函数-----抽象函数
}
#endif //CLASSNAME_H
.cpp文件
class ClassNamw{
//
// 省略其他逻辑代码
//
//
}
带关键字virtual 的函数并且函数直接=0 且没有函数体的函数称为抽象函数,带抽象函数的类称为抽象类
注意 : 我们在写抽象函数的时候 .h文件一定要加上# ifndef ,#define, # endif // 预处理指令 不然编译器会循环引用报错
实战
我们现在有水果抽象类 .h文件
#ifndef FRUITS_H
#define FRUITS_H
#include <iostream>
using namespace std;
//水果 抽象类
class Fruits {
public:
Fruits(int, string);
public:
int size=0;//水果的大小
string relish;//水果的味道
virtual void showInfo()=0;//抽象函数
};
#endif //FRUITS_H
.cpp文件
#include "Fruits.h"
Fruits::Fruits(int size, string relish):size(size),relish(relish) {}
苹果类—实现水果类 .h文件
#ifndef APPLE_H
#define APPLE_H
#include "Fruits.h"
#include "iostream"
using namespace std;
class Apple : public Fruits {
public:
Apple(int, string);
void showInfo();
};
#endif //FRUITS_H
.cpp文件
#include "Apple.h"
Apple::Apple(int size, string relish) : Fruits(size, relish) {
}
void Apple::showInfo() {
cout << "我是苹果,我的信息是 大小: " << size << "我的味道是: " << relish << endl;
}
橘子类–实现水果类 .h文件
#ifndef TANGERINE_H
#define TANGERINE_H
#include "Fruits.h"
class Tangerine : public Fruits {
public:
Tangerine(int, string);
void showInfo();
};
#endif //TANGERINE_H
.cpp文件
#include "Tangerine.h"
Tangerine::Tangerine(int size, string relish): Fruits(size,relish) {
}
void Tangerine::showInfo() {
cout << "我是橘子的信息 大小:" << size << "我是味道: " << relish << endl;
}
还有我们的main函数
#include <iostream>
#include "Apple.h"
#include "Tangerine.h"
int main() {
Apple apple(14, "酸的");
Tangerine tangerine(3, "甜的");
apple.showInfo();
tangerine.showInfo();
}
结果
我是苹果,我的信息是 大小: 14我的味道是: 酸的
我是橘子的信息 大小:3我是味道: 甜的
注意 如果继承类没有重新纯虚函数,那么这个类本身也是一个抽象函数
|