接收者为普通变量,非指针,值传递

接收者为指针变量,引用传递

在上面的案例中,我们定义了两个方法,一个是PrintShow( ), 该方法的接收者为普通方法,一个EditInfo( )方法,该方法的接收者为指针变量,那么大家思考这么一个问题:定义一个结构体指针变量,能否调用PrintShow( )方法呢?如下所示:

通过测试,发现是可以调用的。

为什么结构体指针变量,可以调用PrintShow( )方法呢?

原因是:先将指针stu, 转换成*stu在调用。

等价如下代码:

所以,如果结构体变量是一个指针变量,它能够调用哪些方法,这些方法就是一个集合,简称方法集

如果是普通的结构体变量能否调用EditInfo( )方法。

是可以调用的,原因是:将普通的结构体类型的变量转换成(&stu)在调用EditInfo( )方法。

这样的好处是非常灵活,创建完对应的对象后,可以随意调用方法,不需要考虑太多指针的问题。

下面进行面向对象编程的练习

练习:

定义一个学生类,有六个属性,分别为姓名、性别、年龄、语文、数学、英语成绩。

有2个方法:

一个打招呼的方法:介绍自己叫XX,今年几岁了。是男同学还是女同学。

两个计算自己总分数和平均分的方法。{显示:我叫XX,这次考试总成绩为X分,平均成绩为X分}

1:结构体定义如下:

2:为结构体定义相应的方法,并且在方法中可以完成对传递过来的数据的校验

3:完成方法的调用

在以上的案例中,SayHello()方法中已经完成了name属性的赋值,所以在ShowScore( )方法中,可以直接使用,因为我们使用指针指向了同一个结构体内存。

在调用的过程中,也能体会出确实很方便,,不需要考虑太多指针的问题

练习2:写一个Ticket类,有一个距离属性,

不能为负数,有一个价格属性 ,

并且根据距离distance计算价格Price (1元/公里):

0-100公里 票价不打折

101-200公里 总额打9.5折

201-300公里 总额打9折

300公里以上 总额打8折