2 回答
TA贡献1775条经验 获得超11个赞
为什么要用静态成员函数?
从上述修改中可以看出,不使用静态成员函数显然也能实现相同的功能,那么,为什么要使用静态成员函数呢?
如果把average函数定义为非静态成员函数,那么主函数中将出现stud[1](当然,换成stud[0]或者stud[2]也可以),stud[1]的出现破坏了主函数中语句的逻辑性。他人在阅读主函数时看到stud[1]也许会有疑问:这里为什么要用stud[1]的成员函数,有什么特殊含义吗?是不是this指针必须在指向stud[1]的时候才能求得正确的平均值?降低了主函数的可读性。
静态成员函数主要是用来处理静态数据成员的,而静态数据成员不只属于某一个对象,它是为“全部同类对象”所共用的。因此,定义静态成员函数的目的在于处理“全部同类对象”的共同问题。
静态成员函数不属于某一个特定的对象,因为把一个处理“全部同类对象”共同问题的函数定义为某个对象所有是不合逻辑的。静态成员函数直接使用类名和域运算符调用,提高了语句的逻辑性和可读性。
楼上认为,使用静态成员函数的原因在于,不论有没有定义对象,静态成员函数都可以直接被调用。这的确是静态成员函数的一个特点,但是把它作为使用静态成员函数的原因未免有些牵强。试想,在没有定义对象的情况下,调用静态成员函数又有什么意义呢?
也许有人会说,在没有定义对象的情况下,静态成员函数还可以对静态数据成员进行操作啊。是的,的确可以,可是静态数据成员又是为谁而设的呢?没有定义对象,数据成员也变的没有意义了。
综上,静态成员函数的使用,提高了语句的逻辑性和可读性。
TA贡献1735条经验 获得超5个赞
代码就不写了 直接解释你的问题吧,
average函数如果不设置为静态成员函数,那么你需要实例化一个class Student对象去调用average函数
class Stu=new Student();
Stu.average(); 之类的。
简单的说就是如果函数不是静态的,那么当创建一个对象的时候,这个对象的函数才创建,这也就是为什么需要对象实例化才能去调用一个非静态函数了。
如果使用静态成员函数,就无需创建对象去访问,即使这样是可行的(JAVA里这样,C++呢?),因为不管对象创建与否,静态成员函数总是能够被访问。
添加回答
举报