C语言自定义类对象的访问

北京中科医院曝光 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/jzpj/

一、自定义类对象与数组的关联

接着上一讲,我们将类对象与数组的概念融合在一起(作用是存储使用一组类对象)。比如:

structstudent{

stringname;

doublescore;

}

studentstudents[3];//可以存放3个student类型的对象

students[0].name=“zhangsan”;//我们可以通过数组访问第一个student

students[0].score=90;

我们也可以用指针变量指向一个student对象。假如T是一个类类型,T*就是T指针类型。如int*就是int指针类型。因此T*变量可以指向一个类对象。举例:

studentstu;

student*p=stu;//p是student(这里的student是一种数据类型,我们定义的)指针类型,它可以存放一个student类型的变量的地址。

studentstudents[3];//student类型的数组,数组名是students,数组大小为3

p=students+2;//students指向的是数组中第一个元素的地址,加上2就是第3个元素的地址。

指针变量存储了student类型变量的地址后,我们就可以通过指针变量去访问它指向的那个对象。一般有两种方式:

(*p).name=“wangwu”;//通过*p直接得到p指向的对象,在这里就是stu。*p就是变量stu。

p-score=90;//或者通过间接访问运算符-,p指向的类对象的成员score。

一个指针指向类对象,通常有上面两种方式。一个是*p直接得到一个对象stu,一个是p指向了stu它的score,让它等于具体的值。

二、指针变量与自定义动态内存的关联

上面都是静态的数据,即局部变量。其实我们也可以让指针变量指向动态分配的student的对象。比如

student*p=newstudent;//这个newstudent是存储在堆存储区的。在这里我们分配了一个student的内存块,这个内存块没有名字,但是我们可以把它的地址保存在student类型的指针变量p里面。我们通过指针变量p就能访问到student的内存块。看下面:

p-name=“wang”;//比如p间接访问运算符指向了那个student的name成员,让它等于wang

deletep;//使用完了需要及时释放内存

p=newstudent[3];//此时p指向一个分配了三个student类型数据大小的内存块的起始地址,也就是把第一个student的地址给p。

p[1].score=75;//通过p[1]找到第二个student的对象,把它的score设成75(通过成员访问运算符.score)。

*(p+1).score=92;//其实对于p[1],编译器都会把它先转化成*(p+1),所以它俩的作用是一样的

因此介绍完了如何通过成员访问运算符“.”、间接访问运算符“-”、取内容运算符“*”去访问相应的类对象。

三、自定义类中的函数

前面我们介绍的类种只有两个数据成员name,score,其实我们还可以给它增加函数,比如在这里我们给student增加了一个叫做print的函数。如下:

structstudent{

stringname;

doublescore;

voidprint(){coutname””score’\n’;}

};

intmain(){

studentstu;//在main函数里面我们定义了student类型的变量stu

stu.print();//然后就可以通过stu这个对象访问这个类的print函数了

}

这个成员函数print的函数体是定义在类体里面的,我们也可以在类体外面定义成员函数。注意一点:一定要加上类作用域,即类名::。如果没有这个作用域,那么这个print就是普通的外部函数,就和student类没有一点关系了。

structstudent{

stringname;

doublescore;

voidprint();//成员函数的声明

};

voidstudent::print(){//成员函数的实现

coutname””score’\n’;

}

也就是说,一个类的成员函数,可以把它的函数体放在类体里面,也可以放在外部,放在外部要加上类作用域。




转载请注明:http://www.aierlanlan.com/rzfs/4316.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了