c++ 植物类 继承多态 菱形继承

#pragma once//头文件

#include <iostream>
#include<string>
using namespace std;

//
// 1.实现以下几个类的成员函数
// 2.实现一个虚函数的覆盖及调用
// 3.处理菱形继承问题。
//

// 植物
class Botany
{
public:
	Botany(const string&  name);
	virtual ~Botany();
	virtual void Display();
	Botany(const Botany& b);
protected:
	string _name;//名字
	static size_t _sCount;
};

class Tree : public Botany
{
public:
	//...实现默认的成员函数

	Tree(const string&  name, const int hight);
	virtual void Display();
	virtual ~Tree();
	Tree(const Tree& t);
protected:
	int _hight;		// 高度
};

class Flower : public Botany
{
public:
	//...实现默认的成员函数
	Flower(const string&, const string&  color);
	virtual void Display();
	virtual ~Flower();
	Flower(const Flower& f);
protected:
	string _colour;	// 颜色
};

// 白兰花,即是树有时花。
class MicheliaAlba : public Flower, public Tree
{
public:
	MicheliaAlba(const string& name, const string& color, const int hight);
	virtual void Display();
	virtual ~MicheliaAlba();
	MicheliaAlba(const MicheliaAlba& m);
protected:
	// ...
};

#include <iostream>//函数文件
#include<string>
#include"plant.h"

using namespace std;

size_t Botany::_sCount = 0;

void Botany::Display()
{
	cout<<"Botany: "<< _name << endl;
	cout << _sCount << endl;

}

Botany::Botany(const string&  name)
	:_name(name)
{
	++_sCount;
	cout << "Botany" << endl;
}
Tree::Tree(const string&  name, const int hight)
	: Botany(name)
	, _hight(hight)
{
	cout << "Tree" << endl;
}

Flower::Flower(const string&  name, const string&  color)
	:Botany(name)
	,_colour(color)
{
	cout << "Flower" << endl;
}

MicheliaAlba::MicheliaAlba(const string&  name, const string&  color, const int hight)
	:Flower(name,color)
	, Tree(name,hight)
{
	cout << "MicheliaAlba" << endl;
}

void Tree::Display()
{
	cout << "Tree:" << _name << endl;
	cout << _sCount << endl;
}

void Flower::Display()
{
	cout << "Flower " << _name << endl;
	cout << _sCount << endl;

}

void MicheliaAlba::Display()
{
	cout << "MicheliaAlba " << Flower:: _name <<"  "<<Flower::_colour
		<<"  "<<Tree::_hight<< endl;
	cout << _sCount << endl;

}

 Botany::~Botany()
{
	 cout << "~Botany" << endl;
}

 Tree:: ~Tree()
 {
	 cout << "~Tree" << endl;
 }

 Flower:: ~Flower()
 {
	 cout << "~Flower" << endl;
 }

 MicheliaAlba::~MicheliaAlba()
 {
	 cout << "~MicheliaAlba" << endl;
 }

 Botany::Botany(const Botany& b)
	 :_name(b._name)
 { }

 Tree::Tree(const Tree& t)
	 : Botany(t._name)
	 , _hight(t._hight)
 { }

 Flower::Flower(const Flower& f)
	 : Botany(f._name)
	 , _colour(f._colour)
 { }

 MicheliaAlba::MicheliaAlba(const MicheliaAlba& m)
	 : Tree(m.Tree::_name,m._hight)
	 , Flower(m.Flower::_name,m._colour)
 { }
 
 #include <iostream>//主函数  测试文件
#include<string>
#include"plant.h"
using namespace std;

void test()
{
	MicheliaAlba m("白兰花", "红色",20);
	m.Display();
	MicheliaAlba m2(m);
	m2.Display();
	m.Display();
}

int main()
{
	test();
	return 0;
}
时间: 2024-04-21 23:13:26

c++ 植物类 继承多态 菱形继承的相关文章

植物类(多态和继承)

//#include<iostream> //#include<string> //using namespace std; // //class Botany //{ //public: // Botany(const string& name="") // :_name(name) // { // s_Count++; // } // Botany(const Botany& b) // :_name(b._name) // { // s_C

.NET Core CSharp初级篇 1-6 类的多态与继承

.NET Core CSharp初级篇 1-6 本节内容为类的多态与继承 简介 终于讲到了面向对象三大特性中的两大特性--继承与多态.通过继承与多态,我们能很好的将类的拓展性发挥到了极致.在下面的内容讲解中,我们将从各个方面对继承和多态进行刨析. 继承 继承事实上是一个非常好理解的语法,在C#中实现继承使用A:B,表示A类继承B类.子类(一称为派生类)继承于父类(一称为基类)就好比孩子继承了父亲的一切,但是孩子总归是有自己的个性的,而父亲也有一些不会告诉孩子的事情.如果我们从之前的访问控制符这一

类的继承、菱形继承、派生、多态

一.类的继承(查找顺序先自己再父类) class ParentFoo: def __init__(self,first_name,car,money,house): self.first_name=first_name self.car=car self.money=money self.house=house def teach(self): print("%s教人"%self.first_name) # f1=ParentFoo('zhu','tesla',10,'Haozhai'

python开发面向对象基础:接口类&amp;抽象类&amp;多态&amp;多继承

一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 开发中容易出现的问题 1 class Alipay: 2 ''' 3 支付宝支付 4 ''' 5 def pay(self,money): 6 print('支付宝支付了%s元'%money) 7 8 class Applepay: 9 ''' 1

c++继承汇总(单继承、多继承、虚继承、菱形继承)

一.C++中的对象模型 1. 概念 语言中直接支持面向对象程序设计的部分: 对于各种支持的底层实现机制.(没看懂……) 2. 类中的成员分类 a) 成员函数 i. static function ii. non static function iii. virtual function b)  数据成员 i. static member data ii. non static member data 3. C++对象模型 a) 类对象内存布局中的包括 i. non static member d

python 单继承、多继承、菱形继承

单继承与多继承 单继承:一个类只能继承一个父类的方式.多继承:一个类可以继承多个父类的方式. 单继承:(生物角度) 人类->哺乳类动物->动物->生物->有机物.... 多继承:(社会角度) 舞蹈老师(教舞蹈) 体育老师(运动) 爸爸(抽烟) 妈妈(打扫卫生) 我(舞蹈,运动,抽烟,打扫卫生) 单继承案例: 父类: pass 子类(父类): pass 多继承案例: 父类1: pass 父类2: pass 父类3: pass 子类(父类1,父类2,父类3): pass 多继承的问题所

C++里的继承和多态(下)——单继承、多继承、菱形继承(含虚拟函数的继承)

1.带有虚函数的类 class Base { public:                  virtual void FunTest1()                 {                                 cout << "Base::FunTest1()" << endl;                 }                  virtual void FunTest2()                 

实验五——类的多态,继承和派生2

Part1:验证型实验 1.在派生类函数中,如果是使用对象名.成员名进行访问,则最后运行结果是访问每一个派生类中的成员函数: 2.如果是通过指针来进行访问那么只会访问base1当中的成员函数,因为第一个程序里的BASE1并没有虚函数,所以base2和derived中的成员函数无法将其覆盖,所以只能访问指针当面默认指向的BASE1的成员函数,然而第二个程序使用了虚函数,虚函数的作用是通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数,第二个程序中的base1使用虚函数virtual,即此

C++中的类继承之单继承&amp;多继承&amp;菱形继承

 C++中的类继承之单继承&多继承&菱形继承 单继承是一般的单一继承,一个子类只 有一个直接父类时称这个继承关系为单继承.这种关系比较简单是一对一的关系: 多继承是指 一个子类有两个或以上直接父类时称这个继承关系为多继承.这种继承方式使一个子类可以继承多个父类的特性.多继承可以看作是单继承的扩展.派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单继承.多继承下派生类的构造函数与单继承下派生类构造函数相似,它必须同时负责该派生类所有基类构造函数的调用.同时,派生类的参数个数必须包