C++:对象和类|| this指针对象数组类作用域抽象数据类型章末总结
Posted 赵同学的代码时间
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++:对象和类|| this指针对象数组类作用域抽象数据类型章末总结相关的知识,希望对你有一定的参考价值。
this指针
在介绍this指针之前,先思考一个问题:
若有两个类a,b;如何去比较a,b某属性的大小并返回引用?
这个问题在OOP特性下就变得很有意思,首先,由于OOP的特性,对于这个属性,必须要有公共接口可以调用,将属性取出;其次,要定义某种方法比较这两个属性,然后return。
eg.
top = a.compare(b);
//隐式访问a,显式访问b
top = b.compare(a);
//隐式访问b,显式访问a
理论上以上两种最后都能达到相同的效果,对于compare函数:
const classname & compare(const classname & b) const
{//这是一个返回引用的函数,且承诺不修改内容
...
tmp = b.getinfo();//使用b中信息若在private不能直接访问
...
if(ture) return b;
else return ???;
//此处可以发现找不到a的别名啊,直接写a却又会报错
}
class classname
{
...
typename info;
public:
typename getinfo() const { return info;}//定义一个方法取出信息
}
为了解决compare函数中出现的问题,C++设置了一个特殊的指针this。
而且,所有数据成员被访问时,如total_val其实都是this->total_val.
注意:
Ⅰ:所有函数,包括构造与析构,都含有this
Ⅱ:this被const限定,不能用this修改对象的值
Ⅲ:要返回整个对象,应该使用*this
综上,compare函数中???应该使用*this替代
对象数组
对象和普通的类型一样,可以用线性表的方式定义,定义方法也与普通类型一样:
Classname classname[n] = {
Classname(...),
Classname(...),...};
//定义对象数组及调用构造函数赋初值的方法,不添加则使用默认构造函数
类作用域(简)
啥玩意 |
作用域 |
类中定义的名称 |
整个类 |
static |
所有该类共享 |
抽象数据类型ADT
ADT在数据结构书中有见过,ADT以通用的方式描述数据类型,没有引入语言或实现细节(伪代码)。类概念非常时候ADT方法进行分析与交流。
类和对象章末总结:
面向对象编程强调的是程序如何表示数据。
*OOP第一步是根据它与程序间的接口来描述数据从而指定如何使用数据,然后设计一个类来实现该接口,一般来说,私有数据存储信息,公有成员函数(方法)提供访问数据的唯一途径,类将数据和方法封装,私有性实现数据隐藏。
*通常,类声明放在头文件中,源代码放在方法文件中,便于将接口描述与细节分开,提高代码的可读性。
*类是用户定义的类型,对象是类的实例。因此,大部分对类型可以使用的操作对类均可使用,包括成员运算符. 间接成员运算符->作用域解析符::。
*在构造对象时,系统会调用构造函数,在对象消亡时,系统会调用析构函数。
*类很适合用于描述ADT,公有成员函数接口提供了ADT描述,私有部分完成实现,于是实现了对类的客户隐藏。
以上是关于C++:对象和类|| this指针对象数组类作用域抽象数据类型章末总结的主要内容,如果未能解决你的问题,请参考以下文章
C++初阶:类和对象(上篇)类的定义 | 类的访问限定符及封装 | 类的作用域 | 类的实例化 | 类对象模型 | this指针