类和数据抽象

在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;
}


 
 


猜你喜欢

转载自blog.csdn.net/c1204611687/article/details/73603802