通过一个例子学习C++的类

通过一个例子学习C++的类

#include<iostream>   //头文件
#include<string>     //因为使用了string字符,所以添加string的头文件
using namespace std;
class Building     //建立一个名为Building的类
{
	protected:      //一般这里都是private成员,也就是我们所说的私有成员,但这里使用了保护成员,下面会介绍三种成员的用法
		string name;
		float height;
		float area;
	public:
		Building(string n,float h,float a):name(n),height(h),area(a){};   //构造函数
	Building(const Building&bd1)  //函数的重载,名称一样,赋值参数不同,调用时,通过赋值的参数不同,决定调用不同的构造函数
	{
		name=bd1.name;
		height=bd1.height;
		area=bd1.area;
	}
	string Getname(){
		return name;
	}
	float Getheight(){
		return height;
	}
	float Getarea(){
		return area;
	}
	//虚函数,使得子类中有一个名称一样的函数时,这里使用虚函数,那么即使调用的是父类的这个函数,也会执行子类的相同名称的函数
	virtual float FoundationDepth(){
		return height/15;
	}
	float HeightDifference(Building&bd){
		return height-bd.height;
	}
	float HeightDifference(float h){
		return height-h;
	}
	//朋友函数,在外界定义了一个函数,但是要调用类里的变量,声明朋友函数,并且在这里声明,且注意其参数,只写前缀
	friend bool Correction(Building&,float,int);
	//+号的重载
	Building operator+(float difference)
	{
		Building bd(*this);
		bd.height+=difference;
		return bd;
	}
	//>号的重载
	bool operator>(Building&a)
	{
		/*if(this->area>a.area)
		{
			return true;
		}
		else
		{
			return false;
		}*/
		return this->area>a.area;
	}
 } ;
 //子类,通过public的方式继承父类
 class Mansion:public Building
 {
 	private:
 		unsigned short stories;
 	public:
 		Mansion(string n,float h,float a,unsigned short s):Building(n,h,a),stories(s){};
 		void SetStories(unsigned short s)
 		{
 			stories=s;
		}
		unsigned short GetStories()
		{
			return stories;
		}
		float FoundationDepth()
		{
			return height/14;
		}
 };
 float operator+(Building&a,Building&b){
 	return a.Getarea()+b.Getarea();//这里因为是在类外,所以只能调用共有成员,无法使用.area
 }
 bool Correction(Building&building,float difference,int type)
 {
 	switch(type)
 	{
 		case 1:building.height+=difference;return true;
 		case 2:building.area+=difference;return true;
 		default:return false;
	 }
 }
 int main()
 {
 	Building bd("水塔",20,8);
 	/*cout<<bd.Getname()<<"的高度是:"<<bd.Getheight()<<"米,占地面积是"<<bd.Getarea()<<"平方米。\n";
 	Correction(bd,-1,2);
 	cout<<bd.Getname()<<"的高度是:"<<bd.Getheight()<<"米,占地面积是"<<bd.Getarea()<<"平方米。\n";
 	*/
 	Building bd2(bd);
 	/*cout<<bd2.Getname()<<"的高度是:"<<bd2.Getheight()<<"米,占地面积是"<<bd2.Getarea()<<"平方米。\n";
 	cout<<"bd2地基深度:"<<bd2.FoundationDepth()<<"米\n";
 	Correction(bd,3,1);
 	cout<<"bd与bd2高度之差为"<<bd.HeightDifference(bd2)<<endl;
 	cout<<"bd2与bd高度之差为"<<bd2.HeightDifference(bd.Getheight())<<endl;*/
 	bd=bd+7;
 	cout<<bd.Getname()<<"的高度是:"<<bd.Getheight()<<"米,占地面积是"<<bd.Getarea()<<"平方米。\n";
 	cout<<"两个的面积之和是"<<bd+bd2<<endl;
 	Building bd3("洋房",5,100);
 	if(bd>bd3)
 	{
 		cout<<"水塔占地面积大于洋房\n";
	}
	else
	{
	 	cout<<"水塔占地面积不大于洋房\n";
	}
	Mansion mansion1("公寓",15,100,5);
	cout<<"mansion1的占地面积:"<<mansion1.Getarea()<<endl;;
	cout<<"公寓的地基"<<mansion1.FoundationDepth()<<endl;
	Building*mansion2=new Mansion("洋房",15,300,4);
	cout<<"洋房的地基"<<mansion2->FoundationDepth();
 	return 0;
 	
 }

知识点
1.三种成员
private成员:私有成员,避免外界通过.XX调用修改
public成员:公有成员,类外界可以调用
protected成员:保护类成员,这里需提出一个父类,子类的概念,保护类成员的使用,使得父类的保护类成员可以被子类调用,但是同样不能被外界调用,但是私有成员即使子类也不可以调用,。
2.类的继承
上述代码中定义了一个父类Building,还定义了一个父类的子类Mansion,这里Mansion类通过public继承了父类的定义,子类继承了父类的所有东西,并且可以定义属于自己的新的东西,也就是对父类做了扩展。
jicheng

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值