类和对象(2)

1.由于静态成员函数不属于某个特定的对象,因此。不能像一般的成员函数那样随意的访问对象中的非静态数据成员。只能引用类中声明的静态数据成员。如果要引用非静态数据成员,可通过对象引用。

F

在类中,static 除了可以声明静态成员变量,还可以声明静态成员函数。普通成员函数可以访问所有成员(包括成员变量和成员函数),静态成员函数只能访问静态成员。

编译器在编译一个普通成员函数时,会隐式地增加一个形参 this,并把当前对象的地址赋值给 this,所以普通成员函数只能在创建对象后通过对象来调用,因为它需要当前对象的地址。而静态成员函数可以通过类来直接调用,编译器不会为它增加形参 this,它不需要当前对象的地址,所以不管有没有创建对象,都可以调用静态成员函数。

普通成员变量占用对象的内存,静态成员函数没有 this 指针,不知道指向哪个对象,无法访问对象的成员变量,也就是说静态成员函数不能访问普通成员变量,只能访问静态成员变量。

普通成员函数必须通过对象才能调用,而静态成员函数没有 this 指针,无法在函数体内部访问某个对象,所以不能调用普通成员函数,只能调用静态成员函数。

静态成员函数与普通成员函数的根本区别在于:普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。

2.指向对象数组的指针不一定必须指向数组的首元素。

T

3.静态成员的特点是不管这个类创建了多少个对象,其静态成员在内存中只保留一份副本,这个副本为该类的所有对象共享,或者说静态成员为类所有。

T

普通成员变量每个对象有各自的一份,而静态成员变量只有一份,被所有同类对象共享。

普通成员函数一定是作用在某个对象上的,而静态成员函数并不具体作用在某个对象上。

访问普通成员时,要通过对象名.成员名等方式,指明要访问的成员变量是属于哪个对象的,或要调用的成员函数作用于哪个对象;访问静态成员时,则可以通过类名::成员名的方式访问,不需要指明被访问的成员属于哪个对象或作用于哪个对象。因此,甚至可以在还没有任何对象生成时就访问一个类的静态成员。

当然,非静态成员的访问方式(也即对象名.成员名)其实也适用于静态成员,但效果和类名::成员名这种访问方式没有区别。

使用 sizeof 运算符计算对象所占用的存储空间时,不会将静态成员变量计算在内。对上面的 CRectangle 类来说,sizeof(CRectangle) 的值是 8。

静态成员变量本质上是全局变量。一个类,哪怕一个对象都不存在,其静态成员变量也存在。静态成员函数并不需要作用在某个具体的对象上,因此本质上是全局函数。

设置静态成员的目的,是为了将和某些类紧密相关的全局变量和全局函数写到类里面,形式上成为一个整体。考虑一个需要随时知道矩形总数和总面积的图形处理程序,当然可以用全局变量来记录这两个值,但是将这两个变量作为静态成员封装进类中,就更容易理解和维护。

4.常成员函数可以引用对象的数据成员,但是不能更新数据成员,也不能调用该类中非常成员函数。

T

常成员函数可以引用const数据成员,也可以引用非const的数据成员;

const数据成员可以被const成员函数引用,也可以被非const的成员函数引用;

常成员函数不能调用另一个非const成员函数。

5.this 指针是调用对象的名称,而不是指向调用对象的指针的名称。

F

this指针不是调用对象的名称,而是指向调用对象的指针名称

6.在下面有关静态成员函数的描述中,正确的是()。

A.在静态成员函数中可以使用this指针

B.静态成员函数在类外定义时要用static前缀

C.静态成员函数只能在类外定义

D.在建立对象前,就可以为静态数据成员赋值

D

C++中规定,在建立对象前就可以为静态数据成员赋值。同时规定在静态成员函数中不能使用this指针;静态成员函数在类外定义时,不需要用static前缀;静态成员函数既可以在类内定义也可以在类外定义。

7.由于静态成员函数不属于某个特定的对象,因此。不能像一般的成员函数那样随意的访问对象中的非静态数据成员。只能引用类中声明的静态数据成员。如果要引用非静态数据成员,可通过对象引用。

T

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有理想的上学人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值