1、基类和派生类的定义
派生类是基类的继承
例如:
下面定义了一个基类 base_class1 和一个派生类 deived_class
#pragma once #include <iostream> using namespace std; //基类,包括一个public成员price,一个protected成员discount class base_class1 { public: base_class1(double price_) { price = price_; } ~base_class1() = default; double show_price() { return price*discount; } double price = 0; protected: double discount = 1; }; //派生类 class deived_class :public base_class1 { public: deived_class(double price_) :base_class1(price_){};//派生类的构造需要用到基类的构造函数 void over_discount(double discount_) { discount = discount_; } void output()//显示派生类的值 { cout << discount << endl; cout << price << endl; } };
那么创建派生类程序 如下:
base_class1 base(90.0); cout << base.show_price() << endl; deived_class deived(80.0); deived.output(); deived.over_discount(0.8); deived.output(); cout << base.show_price() << endl;// 输出基类的price, 等于价格乘以折扣
运行结果如下:
90 //基类的price 1 //派生类的 80 0.8 80 90 //基类的discount并未被改变
2、虚函数
在定义基类的时候常常会定义虚函数,派生类能够对虚函数进行覆盖
例如:
class base_class2 { public: base_class2(double num_) :num(num_) {}; virtual void test() { cout << "num=" << num << endl; } double num = 1; }; class derived_class2 :public base_class2 {public: derived_class2(double num_):base_class2(num_) {}; void test() override //覆盖虚函数的标记,如果没有覆盖就会报错 { cout << "虚函数被覆盖,输出:num*2=" << num * 2 << endl; } ; };
程序调用:
base_class2 base2(20); derived_class2 deived2(30); cout << "基类:" << endl; base2.test(); cout << "派生类" << endl; deived2.test(); getchar();
结果:
基类: num=20 派生类 虚函数被覆盖,输出:num*2=60