C++从入门到放弃(6)

本文详细讲解了对象数组的创建,包括单参数构造函数实例、多参数构造函数应用。此外,介绍了对象指针的概念,如何指向对象和成员,并探讨了常量对象的保护机制、this指针的使用以及公用数据的const修饰。重点讲解了成员函数的调用和数据成员的保护策略。
摘要由CSDN通过智能技术生成

对象数组

数组中每一个元素都是同类的对象

如: Student stud[50]; //已声明Student类

若构造函数只有一个参数,则可在定义对象数组时直接为其提供实参:

Student stud[3]={20,30,40};

另外,编译系统只为每个对象元素的构造函数传递一个实参,所以在定义数组时提供的实参个数不能超过数组元素的个数。

若构造函数有多个参数,则在定义数组时为其赋值:

Student stud[3]={
Student{1,2,3},
Student{4,5,6},
Student{7,8,9}
};

对象指针

指向对象的指针


Time *p1;  //定义p1为指向Time类的对象的指针变量
Time t1;   //定义t1为对象
p1=&t1;

一般形式: 类名 *对象指针名;

而 *p1可实现对t1的调用,借此访问类中成员。

指向对象成员的指针


1.指向对象数据成员的指针

定义: 数据类型名 *指针变量名;

实现调用:

p1=&t1.hour;
cout<<*p1<<endl; //输出t1中hour的值

2.指向对象成员函数的指针

三方面相匹配:a. 函数参数的类型和参数个数

                         b.函数返回值的类型

                         c.所属的类

如:  vod(Time:: *p2)();  //定义p2为指向Time类中公用成员函数的指针变量 

定义指向类中公用成员函数的指针变量的一般形式:

数据类型名类名:: *指针变量名)(参数表列);

调用示例:

p2->get_time();  //调用p2所指对象的get_time函数

p3=&Time:: get_time;

(t1.*p3)(); //调用t1中的get_time()函数

成员函数的入口地址:    &类名:: 成员函数名;

也可:    void(Time:: p1)()=&Time:: get_time;  //在定义p1同时进行其指向的定义

this指针


this指针是隐式使用的,它是作为参数被传递给成员函数的。

将对象a的地址传给形参this指针并按照其指向去引用其他成员。

说明:这些都是由编译系统自动实现的,编程者无需将this增加到形参中,也无需对其指向做出定义。同时也可以显式使用this指针:

return(height*width*length);                             //隐式

return(this->height*this->width*this->length);  //显式

也可以用*this表示当前对象,即:

return((*this).height*(*this).width*(*this).length);

此处不能写为 *this.height;  //错误的

公用数据的保护

使得数据在一定范围内可以共享,又保证了数据不被任意篡改,可以使用const定义为常量

常对象


定义时必须赋予初始值:

      Time const t1{1,2,3};

在任何场合常对象中所有成员的值均不能被修改。其一般形式:

      类名 const 对象名{实参列表};

      const 类名 对象名{实参列表}; 

若一个对象被声明为常对象,则不能调用该对象的非const成员函数,否则编译系统报错。

void get_time() const;  //将函数声明为const即可调用

get_time()可访问数据成员,但不能修改

也可:

   mutable int count;

可使用const的成员函数进行访问修改数据成员的值。

常对象成员


1.常数据成员

如类体:

    const int hour;

类体外:

    Time:: Time(int h):hour(h);

2.常成员函数

引用本类中的非const类数据成员而不能修改

定义:    void get_time() const;    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值