接收者为普通变量,非指针,值传递 接收者为指针变量,引用传递 在上面的案例中,我们定义了两个方法,一个是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元公里): 0100公里票价不打折 101200公里总额打9。5折 201300公里总额打9折 300公里以上总额打8折