C++封闭类

 封闭类:

今天,我学习的是C++对象的一种操作.就是成员对象和封闭类.

  那么封闭类是什么呢?和普通类用什么不同吗?

  封闭类就是有成员对象的类,那么成员对象是什么呢?我们一起来看一下吧

  封闭类分为了轮胎类,引擎类,汽车类......我们可以将封闭类可以看作一个完整的汽车.

  那么汽车里面用哪些成员呢,肯定有轮胎对吧,还有引擎,窗户等等,那么轮胎有什么成员呢?有外层的橡胶,里面的金属,对吧.轮胎写成一个对象后,这个轮胎呢是汽车的一部分,而汽车也是一个对象,所以轮胎就是一个成员对象,而汽车呢因为包含了其他对象,就叫做封闭类.

  接下来,就可以开始写程序了.

  我们先写轮胎,轮胎的材质橡胶也可以写成一个对象,包含着橡胶的大小,尺存什么的.而我要给大家做一个最简单的例子,就不用写橡胶,金属什么的了!这个轮胎是一个圆对吧,圆肯定有半径吧,宽度/长度吧,还有高啊,都可以写进去:

轮胎类:

#include<bits/stdc++.h>
using namespace std;
class CTyre{ //轮胎类 
  private:
    int redius; //半径
    int width;  //宽度或长度
    int height; //高度
  public:
  CTyre(){ //构造函数 
    redius=0,width=0,height=0; //赋值 
  } 
  ~CTyre(){ //析构函数 
    printf("%d %d %d\n",redius,width,height); //类销毁时输出这3个成员的值 
  }
  /*
  ......  圆的体积 
  ......  圆的表面积 
  ......  等等 
  */
};

  这个就是我写的其中一个类,轮胎类,里面标注着轮胎的半径,长,高,还有构造函数和祈构函数,中间省略的部分可以写这种东西,这个轮胎的作用等等.

  写完了轮胎,还有什么呢?自然就是引擎了,引擎类里面需要有什么成员呢?首先我们要知道这个引擎是否是好的,还要知道这个引擎是不是开启的,还可以知道这个引擎里面的引擎个数,最后还可以看一下这个引擎的生产公司.

引擎类:

#include<bits/stdc++.h>
using namespace std;
class CEngine{ //引擎类 
  private:
    bool use; //是否正在使用
    bool good_bad; //这个引擎是好的还是坏的
    int parts; //零件的个数
    string production; //生产公司的名称
  public:
  CEngine(){ //构造函数初始化 
    use=false;
    good_bad=true;
    parts=10000; //一般汽车引擎就是这么多零件
    production="丰田汽车"; //目前世界上最大汽车公司 
  } 
  ~CEngine(){ //析构函数 
    cout<<use<<" "<<good_bad<<" "<<parts<<" "<<production<<endl;
  }
  /*
  ......  这个引擎是否是好的 
  ......  这个引擎现在在使用吗? 
  ......  等等 
  */
};

  除了引擎和轮胎,汽车肯定还要很多其他的重要部分,由于过于复杂,今天我们就只写这两个成员类.

  有了引擎和轮胎,就可以有汽车了,汽车里面有什么成员呢?首先,就是这个汽车的价格,然后才是是引擎和轮胎等各种成员类,注意一下,如果是一个成员类的话,构造函数用参数,在写成员类的时候是不需要加参数的:

汽车类:


#include<bits/stdc++.h>
using namespace std;
class CCar{ //汽车类 
  private:
    int price; //汽车的价格 
    CTyre tyre; //汽车的轮胎 
    CEngine engine; //汽车的引擎
  public:
  CCar(int p){//构造函数 
    price=p; //赋值 
  } 
  ~CCar(){ //析构函数 
    printf("%d\n",price); //只用输出这个价格 
  }                         //因为轮胎和引擎类消亡后会自动使用祈构函数      
};

  这个CCar就是我们的封闭类了,里面有着引擎和轮胎两个成员对象.

  现在我讲一下写封闭类的注意事项:

1.任何生成封闭类的语句,都要让编译器明白,对象中的成员对象,是如何进行初始化的.

2.封闭类对象生成时,先执行所有对象成员的构造函数,然后才执行封闭类自己的构造函数.

3.对象成员的构造函数调用次序和对象成员在类中的说明次序一致.

4.和构造函数正好相反,当封闭类对象消亡时,先执行封闭类的析构函数,然后再执行成员对象的析构函数.调用次序也和构造函数的调用次序相反.

总代码:

#include<bits/stdc++.h>
using namespace std;
class CEngine{ //引擎类 
	private:
		bool use; //是否正在使用
		bool good_bad; //这个引擎是好的还是坏的
		int parts; //零件的个数
		string production; //生产公司的名称
	public:
	CEngine(){ //构造函数初始化 
		use=false;
		good_bad=true;
		parts=10000; //一般汽车引擎就是这么多零件
		production="丰田汽车"; //目前世界上最大汽车公司 
	} 
	~CEngine(){ //析构函数 
		cout<<use<<" "<<good_bad<<" "<<parts<<" "<<production<<endl;
	}
	/*
	......  这个引擎是否是好的 
	......  这个引擎现在在使用吗? 
	......  等等 
	*/
};
class CTyre{ //轮胎类 
	private:
		int redius; //半径
		int width;  //宽度或长度
		int height; //高度
	public:
	CTyre(){ //构造函数 
		redius=0,width=0,height=0; //赋值 
	} 
	~CTyre(){ //析构函数 
		printf("%d %d %d\n",redius,width,height); //类销毁时输出这3个成员的值 
	}
	/*
	......  圆的体积 
	......  圆的表面积 
	......  等等 
	*/
};
class CCar{ //汽车类 
	private:
		int price; //汽车的价格 
		CTyre tyre; //汽车的轮胎 
		CEngine engine; //汽车的引擎
	public:
	CCar(int p){//构造函数 
		price=p; //赋值 
	} 
	~CCar(){ //析构函数 
		printf("%d\n",price); //只用输出这个价格 
	}                         //因为轮胎和引擎类消亡后会自动使用祈构函数      
};
int main(){
	CCar a(10000);
} 

 程序输出:

以上就是我今天学习的类了. 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
封闭区域填充是一种常见的图形学算法,可以用来填充闭合图形的内部。在C++中实现封闭区域填充可以使用扫描线算法或者递归算法。 以下是一个使用递归算法实现封闭区域填充的示例代码: ```c++ #include <iostream> #include <graphics.h> using namespace std; // 定义颜色 #define BLACK 0 #define WHITE 15 // 定义点结构体 struct Point { int x; int y; }; // 判断点是否在图形内部 bool isInside(Point p, int color) { // 获取当前点的颜色 int curColor = getpixel(p.x, p.y); if (curColor != color && curColor != BLACK) { // 如果当前点的颜色既不是目标颜色,也不是黑色,则该点在图形内部 return true; } return false; } // 填充一个点 void fillPoint(Point p, int color) { putpixel(p.x, p.y, color); } // 填充一行直线 void fillLine(Point start, Point end, int color) { for (int x = start.x; x <= end.x; x++) { fillPoint({x, start.y}, color); } } // 递归填充 void recursiveFill(Point p, int color) { if (isInside(p, color)) { // 如果当前点在图形内部,则填充该点 fillPoint(p, color); // 向上填充 recursiveFill({p.x, p.y - 1}, color); // 向下填充 recursiveFill({p.x, p.y + 1}, color); // 向左填充 recursiveFill({p.x - 1, p.y}, color); // 向右填充 recursiveFill({p.x + 1, p.y}, color); } } int main() { // 初始化绘图窗口 initgraph(640, 480); // 绘制一个闭合图形 setfillcolor(WHITE); setlinecolor(WHITE); POINT pts[] = {{100, 100}, {150, 200}, {200, 150}, {250, 200}, {300, 100}}; fillpolygon(pts, 5); // 选择填充颜色 int color = YELLOW; // 选择一个图形内部的点作为起始点 Point start{150, 150}; // 开始填充 recursiveFill(start, color); // 暂停窗口 system("pause"); // 关闭绘图窗口 closegraph(); return 0; } ``` 在这个示例中,我们使用了递归算法实现封闭区域填充。首先我们绘制了一个闭合图形,然后选择一个图形内部的点作为起始点,调用 `recursiveFill` 函数开始填充。在 `recursiveFill` 函数中,我们首先判断当前点是否在图形内部,如果是,则填充该点,并向上、下、左、右四个方向递归地填充相邻的点,直到所有的内部点都被填充。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙星尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值