c语言中结构体包含多种类型的变量,可以通过结构体来定义变量 ,而在c++中,结构体包含了函数,就变成了类,
通过类定义的变量称为对象。
类的命名方法:
eg:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
class Cbookname
{
public:
int page;
int heigh;
double hd;
char name[22];
char actor[21];
int show(); //类的成员函数
};
int main ()
{
Cbookname bookname; //定义类的变量
bookname.page=307; //给类的成员赋值
bookname.heigh=21;
bookname.hd=18.45;
strcpy(bookname.name,"爱的教育");
strcpy(bookname.actor,"zhang");
bookname.show(); //调用类的成员函数,可以不用含有参数
return 0;
}
int Cbookname ::show() //定义类的成员函数
{
printf("page=%d,heigh=%d,hd=%lf,name=%s,actor=%s\n",page,heigh,hd,name,actor);
}
不加public的话会显示成员是私有的,这样的话没有权限调用 加了public会认为是公有的。成员可以在其他地方被调用。
在类的函数里可以直接调用类的成员,不用加bookname.
int Cbookname ::show()
用类定义类的变量叫做创建类的对象,或者说实例化一个对象,可以使用‘.’来访问类的对象,和结构体一样,也可以定义一个全局对象,
对象数组
可以类比于结构体数组
测试:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
class Cbookname
{
public:
int page;
int heigh;
double hd;
char name[22];
char actor[21];
int show();
};
int main ()
{
Cbookname bookname[10];
bookname[0].page=307; //给类的成员赋值
bookname[0].heigh=21;
bookname[0].hd=18.45;
strcpy(bookname[0].name,"爱的教育");
strcpy(bookname[0].actor,"zhang");
bookname[0].show(); //调用类的成员函数,可以不用含有参数
return 0;
}
int Cbookname ::show()
{
printf("page=%d,heigh=%d,hd=%lf,name=%s,actor=%s\n",page,heigh,hd,name,actor);
}
成员函数的内容不变,结果如下:
page=307,heigh=21,hd=18.450000,name=爱的教育,actor=zhang
对象的指针
如同结构体的指针
Cbookname *ip,bookname;
ip=&bookname;
但可以这样用 (*ip).hd=11;等价于ip->hd
测试
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
class Cbookname
{
public:
int page;
int heigh;
double hd;
char name[22];
char actor[21];
int show();
};
int main ()
{
Cbookname bookname,*ip;
ip=&bookname;
ip->page=307; //给类的成员赋值
(*ip).heigh=21;
ip->hd=18.45;
strcpy((*ip).name,"爱的教育");
strcpy(ip->actor,"zhang");
(*ip).show(); //调用类的成员函数,可以不用含有参数
return 0;
}
int Cbookname ::show()
{
printf("page=%d,heigh=%d,hd=%lf,name=%s,actor=%s\n",page,heigh,hd,name,actor);
}
page=307,heigh=21,hd=18.450000,name=爱的教育,actor=zhang
对象作为函数的参数:
举例:
class Cbookname bookname,*ip;
ceshi(&bookname);
ceshi(const char *tt)
{
printf("%d",tt->hd);
}
或者:
等同于上面的程序
class Cbookname bookname,*ip;
ceshi(bookname);
ceshi(const char tt)
{
printf("%d",tt.hd);
}
面向对象的编程
简单理解,c++以及java,php都可以通过类来创建对象,所以用这些语言编程称为面向对象,而c语言不支持类和对象,也就成了面向过程语言。
2)参照book205.cpp程序,增加一个成员函数Level,Level函数根据超女资料,判断超女的级别,级别的判断标准如下:
妃子:(1)年龄18-25岁;(2)身高165-178cm;(3)身材火辣;(4)颜值漂亮。
宫女:(1)年龄18-30岁;(2)身高160-165cm;(3)身材火辣或者普通;(4)颜值一般。
杂役:(1)年龄35-40岁;(2)身高155-165cm;(3)身材普通或者飞机场;(4)颜值一般。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
class Cgirl
{
public:
int age; //年龄
int heigh; //身高
char aa[22];
char bb[22]; // 0-妃子,1-宫女,2-杂役,3-不被录用
int level();
};
int main()
{
Cgirl girl;
girl.age=22;
girl.heigh=168;
strcpy(girl.aa,"火辣");
strcpy(girl.bb,"漂亮");
girl.level();
if(girl.level()==0)
printf("当妃子\n");
if(girl.level()==1)
printf("当宫女\n");
if(girl.level()==2)
printf("当杂役\n");
if(girl.level()==3)
printf("不合格\n");
return 0;
}
int Cgirl ::level()
{
if(((age>18) && (age<25) ) &&
((heigh>165) && (heigh<178)) &&
((strcmp(aa,"火辣")==0) ) &&
((strcmp(bb,"漂亮")==0) ))
return 0;
if(((age>18) && (age<30)) &&
((heigh>160) && (heigh<165)) &&
(((strcmp(aa,"火辣")==0))||((strcmp(aa,"普通")==0))&&((strcmp(bb,"漂亮")==0))))
return 1;
if(((age>35) && (age<40)) &&
((heigh>155) && (heigh<160)) &&
(((strcmp(aa,"普通")==0))||((strcmp(aa,"飞机场")==0))&&((strcmp(bb,"一般")==0))))
return 2;
return 3;
}
当妃子