你的程序有对象吗???
c++是一种
(杂种语言)融合了面向过程和面向对象的一种高级语言。平时竞赛中大家使用的很多是面向过程(至少在我这里是的)。那么,面向对象是什么呢?
class(对象)就像一个属于一个教室的柜子,其中每个人能拿出来的叫公共的东西(public),只能通过公共的东西调动的叫私有的东西(private)
(原谅我的描述)
(
原
谅
我
的
描
述
)
看到这,如果学过结构体的同学可能会掀桌(内心:struct!你以为换了个马甲我就不认识你了!)……等下,被冲动,结构体可没对象高级(可能是因为大家都在争取对象吧)
class完全碾压了struct(struct:喵喵喵?),因为struct比较虚,它只能包含比较垃圾的数据元素(struct&数据元素:喵喵喵?)而class能包含较复杂的函数。如下:
世纪之战!struct VS.class!!!
世
纪
之
战
!
s
t
r
u
c
t
V
S
.
c
l
a
s
s
!
!
!
struct Struct{
int name1;
int name2;
}Something,Array[1000];
class Class{
int name0;//public外默认为private
public:
int name1;
void name2(){
}
private:
int name3;
void name4(){
}
}Something2,Array2[i];
其实class和struct定义没什么区别,但实现的东西明显class更多。但是到这,class的神通还没施展出来……
为了下面的讲解,我们将要创建一个时钟的类(借助了我学的教程):
#include<iostream>
using namespace std;
class Clock{
public:
void Set_New_Time(int New_Hour,int New_Minute,int New_Second){
hour=New_Hour;
minute=New_Minute;
second=New_Second;
}
private: //private可以保护数据不被人从外部破坏
int hour,minute,second;
}
Clock::showTime(){
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
int main(){
Clock My_New_Clock;
int second,minute,hour;
cin>>second>>minute>>hour;
My_New_Clock.Set_New_Time(second,minute,hour);
My_New_Clock.Show_Time();
return 0;
}
神通一:构造函数和析构函数
构造函数是一个与类名一样的函数,用来为类中元素赋初值,如下:
#include<iostream>
using namespace std;
class Clock{
public:
void Set_New_Time(int New_Hour,int New_Minute,int New_Second){
hour=New_Hour;
minute=New_Minute;
second=New_Second;
}
Clock(int New_Hour,int New_Minute,int New_Second){
hour=New_Hour;
minute=New_Minute;
second=New_Second;
}
private: //private可以保护数据不被人从外部破坏
int hour,minute,second;
}
Clock::showTime(){
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
int main(){
Clock My_New_Clock;
int second,minute,hour;
cin>>second>>minute>>hour;
My_New_Clock.Clock(1,2,3);
My_New_Clock.Set_New_Time(second,minute,hour);
My_New_Clock.Show_Time();
return 0;
}
要注意的是,构造函数也能复制哦……但这里不讲。(其实是我也懵)
有构造函数,肯定会有析构函数(不要问我为什么) 它就是构造函数前加个”~”,能回收“垃圾” 。
神通二:组合类
组合类是一个类中包含另一个了,如下:
class Worker{
private:
string name;
int age;
string job;
public:
string Give_A_Job(string job){
return job;
}
};
class Company{
public:
//something……
private:
int Number;
Worker My_Worker[100000];//here!!!!!
};
神通三:继承
这里很好理解,就是继承遗产一个类的所有东西,如下
class A{
//something
};
class B:public A{
//something
}
剩下的神通(网上盗来的):
- 多态:多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数
- 抽象:数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节
- 封装:封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全