封闭类:
今天,我学习的是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);
-
}
程序输出:
以上就是我今天学习的类了.
转载:https://blog.csdn.net/wo_ai_luo_/article/details/127638588