注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mister.Hu(巷里人家)

Go abroad!

 
 
 

日志

 
 
关于我

A campus photograph palyer,an enthusiastic reader,a solitary writer,a future traffic engineer.

网易考拉推荐

C++强化【11】  

2015-09-06 11:14:47|  分类: Senior |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

实例110:产量统计

#include <iostream>

using namespace std;

 

class Cun_A

{

public:

        Cun_A(double x,double y,double z)

        {

                 acer_veget=x;

                 acer_fruit=y;

                 acer_grain=z;

        }

        ~Cun_A(){}

        void SetPerProduct(double a,double b,double c)

        {

                 output_per_acerV=a;

                 output_per_acerF=b;

                 output_per_acerG=c;

        }

        void veget()

        {

                 double result=acer_veget*output_per_acerV;

                 cout<<"A村蔬菜的产量为:"<<result<<endl;

        }

        void fruit()

        {

                 double result=acer_fruit*output_per_acerF;

                 cout<<"A村水果的产量为:"<<result<<endl;

        }

        void grain()

        {

                 double result=acer_grain*output_per_acerG;

                 cout<<"A村稻谷的产量为:"<<result<<endl;

        }

private:

        double acer_veget;//蔬菜作物的占地

        double output_per_acerV;//每亩地产蔬菜多少

        double acer_fruit;//水果作物的占地

        double output_per_acerF;//每亩地产水果多少

        double acer_grain;//稻谷作物的占地

        double output_per_acerG;//每亩地产稻谷多少

};

void main()

{

        Cun_A A(1.2,2,3);

        A.SetPerProduct(500,400,700);

        A.veget();

        A.fruit();

        A.grain();

}

注:定义了一个类Cun_A定义的,在public元素中,首先定义了一个带参数的构造函数,注意构造函数的写法,名字与类名相同,且用定义的形参x,y,z对参数acer_vegetacer_fruitacer_grain进行赋值。

构造函数之后,需要一个析构函数。

再往下看,则是类中的函数。这些函数不同于构造函数。它们有返回类型。

private中,定义了几个参数,表示这些参数只能在类内使用,不能在外部调用,这样可以避免对这些参数的随意篡改和定义。

当然,void SetPerProduct(double a,double b,double c)其实是可以和构造函数放在一起,组成一个六参数构造函数。

 

实例111:乡村生产总值

//实例111  (同类对象数据统计(ABC对象相加))

#include <iostream>

using namespace std;

 

class Cun_product

{

public:

        Cun_product(){veget_result=0;fruit_result=0;grain_result=0;}

        Cun_product(double x,double y,double z)

        {

                 veget_result=x;

                 fruit_result=y;

                 grain_result=z;

        }

        ~Cun_product(){}

        friend Cun_product operator+(Cun_product cun1,Cun_product cun2);//重载友元运算符函数

        void output()

        {

                 cout<<veget_result<<","<<fruit_result<<","<<grain_result<<endl;

        }

private:

        double veget_result;

        double fruit_result;

        double grain_result;

};

Cun_product operator+(Cun_product cun1,Cun_product cun2)

{

        Cun_product add;

        add.veget_result=cun1.veget_result+cun2.veget_result;

        add.fruit_result=cun1.fruit_result+cun2.fruit_result;

        add.grain_result=cun1.grain_result+cun2.grain_result;        

        return add;

}

void main()

{

        Cun_product cun_A(1.2,3,4),cun_B(2.3,5,1),cun_C(1.4,3,2),cun;

        cun=cun_A+cun_B+cun_C;

        cout<<"ABC村总共的蔬菜、水果和稻谷产量分别为:";

        cun.output();

}

注:首先注意,在运行这个程序的时候,VC会出现fatal error C1001: INTERNAL COMPILER ERROR的错误,网上解释说是VCBUG,与程序本身无关。的确,将using namespace std;

改为:

using std::cout;
using std::endl;
即可

这里的关键在于将运算符重载,并定义为类的友元函数(友元函数可以访问其私有变量),即friend Cun_product operator+(Cun_product cun1,Cun_product cun2);friend用于标识友元函数,运算符重载的声明格式为:类名 operator运算符(变量1,变量2,····)。本例中,声明在类中完成,定义在类外完成,即:

Cun_product operator+(Cun_product cun1,Cun_product cun2)

{

        Cun_product add;

        add.veget_result=cun1.veget_result+cun2.veget_result;

        add.fruit_result=cun1.fruit_result+cun2.fruit_result;

        add.grain_result=cun1.grain_result+cun2.grain_result;        

        return add;

}

可见其可以直接调用类中的私有成员。

最后,在主函数中,cun=cun_A+cun_B+cun_C将会调用重载的运算符。

 

实例112:求圆的面积和周长

//实例112  求圆的面积和周长

 

#include <iostream>

using namespace std;

 

#define Pi 3.14159265

class circle

{

public:

        double area(double x)

        {

                 return Pi*x*x;

        }

        double circumfer(double y)

        {

                 return 2*Pi*y;

        }

public:

        double radius;

};

void main()

{

        circle _circle;

        cout<<"请输入圆的半径:";

        cin>>_circle.radius;

        cout<<"圆的面积为:"<<_circle.area(_circle.radius)<<endl;

        cout<<"圆的周长为:"<<_circle.circumfer(_circle.radius)<<endl;

}

注:本例主要是对publicprivate的辨析,可见,将参数radius定义为公用类型后,可以在main函数中直接调用:_circle.radius

 

实例113:动物对象进化(继承)

#include <iostream>

using namespace std;

 

class animal_ancestor

{

public:

        animal_ancestor(){}

        ~animal_ancestor(){}

        void respire()//呼吸

        {

                 cout<<"可以呼吸"<<endl;

        }

};

class ape:public animal_ancestor

{

public:

        ape(){}

        ~ape(){}

        void move()//行走

        {

                 cout<<"可以行走"<<endl;

        }

};

class human:public ape

{

public:

        human(){}

        ~human(){}

        void miss()

        {

                 cout<<"可以想念某人"<<endl;

        }

};

void main()

{

        human _human;

        ape _ape;

        cout<<"人类";

        _human.respire();

        _human.move();

        _human.miss();

        cout<<"猿人";

        _ape.move();

        _ape.respire();

}

注:继承的含义是,子类可以拥有母类的所有函数,当在main函数中输入一个子类时,可以调用从子类到母类所有的函数及public成员。继承的声明格式为:

class 子类名:public 母类名

 

实例115:纯虚函数

#include <iostream>

using namespace std;

 

class xingge//抽象类

{

public:

        xingge(){}//构造函数

        virtual void talk()=0;//纯虚函数

        virtual void kind_hearted()=0;//纯虚函数

 

};

class child1:public xingge//子类child1

{

public:

        child1(){}

        void talk()

        {cout<<"沉默寡言"<<endl;}

        void kind_hearted()

        {cout<<"热心肠"<<endl;}

};

class child2:public xingge//子类2

{

public:

        child2(){}

        void talk()

        {cout<<"碎碎念"<<endl;}

        void kind_hearted()

        {cout<<"热心肠"<<endl;}

};

void main()

{

        xingge *_xg;//抽象类指针

        child1 _c1;//child1实例化

        child2 _c2;//child2实例化

        _xg=&_c1;//取址child1

        cout<<"child1的性格:"<<endl;

        _xg->talk();

        _xg->kind_hearted();

        _xg=&_c2;//取址child2

        cout<<"child2的性格:"<<endl;

        _xg->talk();

        _xg->kind_hearted();

}

注:虚函数的主要功能在于实现多态,解决类继承中由于模糊引用出现的二义性问题。即,当一个类(在此处指基类)响应同一条消息时,结果却不一样。实现的方法是,在基类中先声明好虚函数,然后在子类中对虚函数进行再定义。在主函数中,利用指针对子类的不同虚函数进行取值。

当然,经实验表明,不需要使用虚函数也能达到上述效果,代码如下:

#include <iostream>

using namespace std;

class xingge//抽象类

{

public:

        xingge(){}//构造函数

};

class child1:public xingge//子类child1

{

public:

        child1(){}

        void talk()

        {cout<<"沉默寡言"<<endl;}

        void kind_hearted()

        {cout<<"热心肠"<<endl;}

};

class child2:public xingge//子类2

{

public:

        child2(){}

        void talk()

        {cout<<"碎碎念"<<endl;}

        void kind_hearted()

        {cout<<"热心肠"<<endl;}

};

void main()

{

        child1 _c1;//child1实例化

        child2 _c2;//child2实例化

        cout<<"child1的性格:"<<endl;

        _c1.talk();

        cout<<"child2的性格:"<<endl;

        _c2.talk();

}

 

实例119:入学登记系统

#include <iostream>

#include <string>

using namespace std;

 

struct stu_info//学生信息

{

        string name;//姓名

        int sex;//性别,0-女,1-

        int age;//年龄

        string hometown;//籍贯

        string mobile_number;//手机号

        int major;//专业

        int class_num;//班级号

};

class student

{

public:

        student();//构造函数

        void Print();//打印学院情况

        void Input();//输入信息

        bool Certain();//该条信息是否已存在

        void Register();//登记信息

private:

        stu_info _stu[100];//系统只能包括100人的信息

        stu_info temp;//临时信息

        int num;//总共几个人

};

student::student()

{

        num=0;//初始只有0个人

}

void student::Print()//打印信息

{

        cout<<"本系统只登记电子信息学院的学生信息"<<endl;

        cout<<"学院下的专业分别为:"<<endl;

        cout<<"  0-信号与信息处理"<<endl;

        cout<<"  1-通信原理"<<endl;

        cout<<"  2-电路系统"<<endl;

        cout<<"每个专业下分别设有2个班,分别为0001"<<endl;

}

void student::Input()//输入信息

{

        cout<<"请按照下面提示,在右面输入信息:"<<endl;

        cout<<"姓名:"; cin>>temp.name;

        cout<<"性别:"; cin>>temp.sex;

        cout<<"年龄:"; cin>>temp.age;

        cout<<"籍贯:"; cin>>temp.hometown;

        cout<<"手机号:"; cin>>temp.mobile_number;

        cout<<"专业编号:"; cin>>temp.major;//输入专业

        cout<<"班级编号:"; cin>>temp.class_num;//输入班级号

}

void student::Register()//登记信息

{

        if(Certain()==true)//当前信息还没有

        {

                 if(num>99)

                         cout<<"登记系统已满,下午再来,谢谢"<<endl;

                 else

                 {

                         _stu[num]=temp;//赋值

                         cout<<""<<num+1<<"条信息成功登记"<<endl;

                 }

                 num++;//人数加1

        }

        else

                 cout<<"您已经登记过,无需重复"<<endl;

}

bool student::Certain()//是否

{

        for(int i=0;i<num;i++)//与所有有效信息比较

        {

                 if(_stu[i].age==temp.age && _stu[i].class_num==temp.class_num

                         && _stu[i].hometown==temp.hometown

                         && _stu[i].major==temp.major

                         && _stu[i].mobile_number==temp.mobile_number

                         && _stu[i].name==temp.name && _stu[i].sex==temp.sex)//已存在

                         return false;

        }

        return true;

}

void main()

{

        student a;//学生类对象

        int ch;//选择

        a.Print();//打印注意事项

        do

        {

                 a.Input();//输入信息

                 a.Register();//登记 

                 cout<<"继续输入吗:0-是,1-"<<endl;

                 cin>>ch;

        }while(ch==0);

}

注:首先定义了一个结构,用于存储每一个学生的信息,这个思想非常的重要。因为可以将每一个学生的大量信息打包,从而简化了之后的统一赋值、变换等操作。然后是一个类,在这个类中,函数的声明和函数的定义是分开的。观察类的私有成员可知,这里定义了一个结构数组和一个临时结构,后者用于存储输出的值,前者用于存储输入的值的集合。接下来是对函数的定义,先是一个输出函数,然后是一个录入函数,使用户输入其信息,接着是登记函数,主要用于判断是否可以登记,而判断的准则需要调用之后的bool函数,即将录入的信息与系统中已经有的所有结构体进行对比,如果有不一样的,则可以录入。

  评论这张
 
阅读(37)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016