类和数据抽象
来源:互联网 发布:php 获取远程图片 编辑:程序博客网 时间:2024/06/05 20:16
在C++中通过类来定义自己的抽象数据类型,数据抽象能够隐藏类对象的内部表示,同时任然允许执行对象的公有操作。这里涉及类的一些最基本的主题:类作用域,构造函数,this指针,友元,可变成员和static成员。
1.类的定义和声明。
简单来说,类就是定义了一个新的类型和一个新的作用域。
类成员包括数据成员,成员函数,类型别名。
将关键字const加到成员函数形参表之后,就可以将成员函数声明为常量:
double AvgPrice()const;
const成员函数不能改变该对象之数据成员。且const关键字必须同时出现在申明和定义中。
可以声明一个类而不定义它:
class MyScreen; //声明类
在声明之后,定义之前,类MyScreen是个不完全类型。不完全类型只能以有限方式使用,不能定义不完全类型对象,只能用于指向该类型的指针或引用,或者用于使用该类型的形参或返回类型的函数声明。
类一般在头文件中进行定义,定义类不会分配存储空间,只有定义类对象才会分配存储空间。
2.this指针
类的非static成员函数有一个附加的隐含参数,一个指向该对象的this指针,当类的成员函数需要返还*this时,需要考虑是否将成员函数定义为const,我们甚至可以对成员函数基于const而进行重载:
MyScreen screen(5,3);
MyScreen screenCon(5,3);
screen.set('#').display(); //非const版本的display
screenCon.display(); //const版本的display
3.类作用域
一般的,数据成员和成员函数使用对象成员访问操作符来访问,类型别名使用类作用域来访问,在类定义外部定义成员函数时,需要添加类作用域,且,函数返回类型不在类作用域中,形参和函数体在类作用域中。
4.构造函数
构造函数分为2个阶段,形参列表完成初始化,函数体完成计算语句,const数据成员,应用类型数据成员,没有默认构造函数的类类型数据成员,必须只能在形参列表中进行初始化。
类通常应定义一个默认构造函数。
explicit关键字可以防止隐式类类型转换。本章参考例子:
#include "MyScreen.h"MyScreen::MyScreen(void){}MyScreen::~MyScreen(void){}char MyScreen::Get()const{return m_strContents[m_Cursor];}char MyScreen::Get(Index ht,Index wd)const{return m_strContents[ht*m_Width + wd];}MyScreen::Index MyScreen::GetCursor()const{return m_Cursor;}MyScreen &MyScreen::Set(char ch){m_strContents[m_Cursor] = ch;return *this;}MyScreen &MyScreen::Set(Index ht, Index wd,char ch){m_strContents[ht*m_Width + wd] = ch;return *this;}MyScreen &MyScreen::Move(Index ht,Index wd){m_Cursor = ht *m_Width + wd;return *this;}MyScreen &MyScreen::Display(std::ostream &os){os << m_strContents;return *this;}const MyScreen &MyScreen::Display(std::ostream &os)const{os << m_strContents;return *this;}
- 类和数据抽象
- 类和数据抽象
- 类和数据抽象
- C++ 类和数据抽象
- 类和数据抽象(一.1)
- 类和数据抽象(一.2)
- C++中的类和数据抽象
- 类和抽象数据(学习笔记)
- 第三部分 类和数据抽象----大纲
- 学习笔记三:类和数据抽象
- 数据抽象和层次关系
- 抽象类和抽象方法
- 抽象类和抽象方法
- 抽象方法和抽象类
- 抽象方法和抽象类
- 抽象类和抽象方法
- 抽象类和抽象方法
- 抽象方法和抽象类
- odi-15050:flow control not possible if no key is declared in your target datastore
- Immutable.js 以及在 react+redux 项目中的实践
- Error:Execution failed for task ':inferentdemo:processDebugResources'. finished with non-zero exit v
- M1卡做电子钱包结构
- 二维码扫描的手势调焦
- 类和数据抽象
- React创建table
- 解决Android 5.0以下出现 java.lang.NoClassDefFoundError,找不到类
- sqlite3 表里插入系统时间(时间戳)
- React-native 热更新之pushy!
- 数据库(1NF,2NF,3NF)
- Linux_用户、组和权限问题
- Word文档到Asciidoc转换
- mac本拿到手的那几天我做了什么