今天学习了下C++类的一些入门知识,总结下今天学到的,希望能够真正的学通学精“类”这个计算机的神奇类型。
1.什么是类?这个很大一堆概念,没去背,在我看来,类就是一个数据类型,一个用户自定义的类型,这个类型里面封装了许多属于这个类的一些数据和方法,比如,人就是一个类型,数据就是手,脚这些,方法就是人能干的行为,比如吃饭这些。
class Person
{ public :
void fn_eat();
privtate:
string s_hand;
strng s_foot;
};
2.类是一个对象,比如Person类相当于string,也是一个数据类型,而string s这个s变量就相当于类的对象即一个。Person person;
这个人可以享用这个类里面的方法和数据,即他具有一个人的所有功能。
那么“Public”和“private“啥用的,public说明,即他是公开的,类的对象可以调用他,而private呢,就是私有的,只有类的成员函数能够调用他。即要通过person.fn_eat()来调用s_hand,如果想要直接person.s_hand,那么类型必须是公开,也就是他想要直接暴露在外面,那么就要public。
3.类对象的初始化,和定义一个string s变量一样,你要给S进行初始化,不然的话,要是有很多个类的对象,初始化一个个过去是一件很麻烦的事情。这个时候,该咋办呢,有什么办法能够一次就能够一致初始化全部对象呢?
构造函数闪亮登场:
构造函数即定义一个函数来初始化对象,需要注意几点:1.构造函数名字必须和类名一样,记住是类名,不是对象名哦。2构造函数没有函数类型,即直接函数名(),没有void,int这些,其他没啥好讲的了,直接看例子:
class Person
{ public:
Person();//先声明下构造函数
};
Person ::Person()
{
}//定义下构造函数
4.定义了一个类型,也有这个对象了,有可以把这个对象初始化的函数了。接下来就需要开始操作了嘛。
慢!咱不能普通的调用这个对象,需要用指针。
其实把对象看成string这些变量类型一样就可以了。
Person person[4]={};
//接下来,用指针,其实都一样
Person *p=person;
//记住哦,指针类型是person哦,这个就是自定义类型,其他都和数组一样了
5,直接上具体例子:
#include<iostream>
#include<string>
#include<time.h>
using namespace std;
class Person
{ public :
void fn_maopao(string );
Person(int count,string name);
/* {icount=count;
sname=name;
}*/
int fun_max(Person *,int );
int icount;//选票数
string sname;//候选人名字
};
int main()
{ Person person[3]={Person(0,"张三"),Person(0,"李四"),Person(0,"王五")};//调用构造函数
//Person *p=person;
for(int b=0;b<3;b++)
person[b].icount=0;
int i=0;
int j=0;
int sum=0;
string s;
while(i<5)
{ cout<<"请输入你觉得有戏的候选人"<<endl;
while(cin>>s)
{
if(s!="张三"&&s!="李四"&&s!="王五")
{ cout<<"对不起,你选择的人不在候选人之列,请重新确定后再输入"<<endl;
j++;
if(4-j>0)
{cout<<"你还有"<<4-j<<"次机会"<<endl;}
else
{cout<<"你已经没有机会了"<<endl;
break;}
}
else
break;}
/*用数组能大大简化,需要优化*/
for(sum=0;sum<3;sum++)
{if(s==person[sum].sname)
person[sum].icount++;
}
string s="";
i++;
}
for(i=0;i<3;i++)
{cout<<person[i].sname<<"一共获得"<<person[i].icount<<"票"<<endl;}
int ipos=0;
//int itemp=person[0].icount;
// for(int c=1;c<3;c++)
// {if(itemp<person[c].icount)
// {itemp=person[c].icount;
// ipos=c;
// }
// }
ipos=person[0].fun_max(person,3);
cout<<"恭喜"<<person[ipos].sname<<"获选"<<endl;
}
Person::Person(int count,string name)
{ icount=count;
sname=name;
}
int Person::fun_max(Person *p,int icount)//指针和类对象
{ int itemp=p[0].icount;
int ipos=0;
for(int j=1;j<icount;j++)
{ if(itemp<p[j].icount)
{itemp=p[j].icount;
ipos=j;}
}
return ipos;
free(p);//指针用过以后销毁
}
//数组对象,构造函数,初始化的重要性,类其实就是多了一个类型