问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何学好C++中的类

发布网友 发布时间:2022-10-11 00:03

我来回答

2个回答

热心网友 时间:2023-10-09 22:23

14.2.3 C++中的类

面向对象程序设计中的类,最初应该来自分析模型或者设计模型,其中对于类所具有的属性和操作都进行了严格定义,几乎可以将这些设计得十分详细的、以图形方式描述的类直接转换成C++的类。本节介绍的是在语言中如何将类描述出来。
1. 类的说明
类描述了具有共同特征的一组对象,这组对象的属性和行为相同,只不过具体对象的属性值等有所区别。C++中类的定义一般分为类的说明部分和类的实现部分。其中类说明的格式如下:
class<ClassName>
{
private:
私有数据和函数
public:
受保护数据和函数
};
其中,class是关键字。<ClassName>是用户自定义的C++标识符,Visual C++中类名的风格是所有类的名字都以大写字母C开头,表示这是个类的名字,例如CBOOK,CStudent等。被花括号括起来的部分称作类体。注意,类说明是以分号作为结束的。
类体主要由一些变量和函数说明组成,分别称为类的数据成员和函数成员,统称为类成员。它们被分成3类,一类叫做公有成员,一类叫做私有成员,另一类叫做受保护成员,分别由关键字public,private和protected指明,这几个关键字被称为访问说明符(access specifier),用来控制相应成员在程序中的可访问性,使得信息封装和模块化的风格更好。访问说明符说明了对该说明符与下一个说明符之间出现的类成员的访问*。类体中可以出现多个说明符,每个说明符也可出现多次,不同说明符的出现次序没有*。当从类体开始处到某些类成员前没有访问说明符,或类体中根本没有访问说明符时,这些成员被默认是私有成员。
除了类的友元可以访问类的任何成员外,类的私有成员只能被其自身成员所访问。即私有成员的名字只能出现在所属类类体、成员函数中,不能出现在其他函数中;而对于一个类的公有成员而言,在程序的任何位置都能够以正确的方式引用它;类的保护成员只能在该类的派生类类体中使用。
[例14.1] 描述图14.6中所描述的图书类。
class CBook
{
private:
char * m_pczName;
int m_nPages;
int m_nEdition;
public:
void GetBookName(char *pName);
int GetTotalPages();
int GetBookEdition();
private:
void SetBookName(char * pName);
void SetTotalPages(int nPages);
void SetBookEdition(int nEdition);
public:
CBook();
};
CBook类中定义了私有和公有两类成员,其数据成员都为私有,这是出于封装的目的,不希望直接访问数据成员,而是通过所提供的公有函数访问,例如要知道书的名字可调用函数GetBookName(),要改变书的版本号要调用SetBookEdition()。
2. 类的定义
上述类说明声明了类的内部结构(数据成员)以及类的接口(成员函数的函数原型),但究竟这些函数的功能怎样实现并没有进行具体定义,因此要给出这一类对象的具体行为还应该对类的成员函数进行定义——类的实现。由于数据成员作为类体的部分已经在类说明中被说明和定义(对于常量对象),而类体的另一部分是成员函数,因此成员函数的定义有时也被称为类体的定义或类的定义。
1).成员函数的定义
成员函数的定义格式如下:
<ReturnType><ClassName>::<FunctionName>(<ArgumentList>)
{...}
与一般函数定义不同的是这里多出了类名<ClassName>和域运算符::用来指明所定义的函数属于哪个类,这是必需的,因为不同类中的成员函数可能重名,这种情况在客观世界中十分常见,不指定成员函数所属的类就无法知道要定义的是哪一个类的成员函数。花括号括起来的部分是函数体,它属于类体的一部分,其中可以直接调用类的所有成员,就如同它们是在函数体内定义的自动变量一样,包括数据成员和成员函数,而不用再显式地指明所属类体。注意,在函数中所调用的属性和其他成员函数为当前对象所具有的属性和成员函数。
[例14.3] 定义CBook类成员函数的实现。
Void CBook::GetBookName(char * pName)
{ strcpy(pName,m_pczName); }
int CBook::GetBookEdition()
{ return m_nEdition;}
void CBook::SetBookName(char * pName)
{
if(m_pczName!=0)
delet[ ] m_pczName; //如果已经有了旧名字,删除它,然后重新命名
m_pczName=new char[strlen(pName)+1];
//重新分配存储空间
strcpy(m_pczName,pName);
//复制字符串
}
void CBook::SetTotalPages(int nPages)
{ m_nPages=nPages; }
void CBook::SetBookEdition(int nEdition)
{ m_nEdition=nEdition; }
[例14.3] 定义CBook类成员函数的实现。
void CPoint::SetXY(int x,int y)
{
m_x=x;
m_y=y;
}
int CPoint::GetX()
{ return m_x; }
int CPoin:GetY()
{ return m_y; }
上述定义中,函数SetXY(int x,int y)是用所提供的函数参数x和y的值去设置CPoint类某个对象的m_x和m_y值。而其他两个函数的实现仅是将相应的坐标值返回。
通常将类的说明放在一个以.h为扩展名的文件中,称为头文件,其中定义了类的接口(iterface),可以同其他类的说明同放于一个文件。如果类说明的程序行较多应该将它放在一个独立文件中,Visual C++的风格是主文件名起名为类名去掉前面的字符C,例如CBook的类说明可以放在文件Book.h中,将类体的定义放于一个以.cpp为扩展名的文件中,称为类的实现文件,在这个文件的开始部分应用文件包含指令将类说明文件包含进来。这样做的目的主要是为了方便阅读,因为通常只要查看类的定义就可知道成员的调用格式。这里介绍的文件名只是一种编程风格,编程者可以遵循这种风格,也可以不这样做。
2.带缺省参数的成员函数
与普通函数一样,成员函数参数可以被指定缺省值,当调用该成员函数时,如果没
有显式指明参数,则按照相应的语法规则用参数缺省值作为参数调用该成员函数。
说明成员函数参数缺省值是在类声明中的函数原型中进行的,其格式和规则与一
般函数参数缺省值的说明类似。例如:
class CPoint
{
...
void SetXY(int x=0,int y=0);
...
};
3.重载成员函数
成员函数可以重载,方式与一般函数的重载类似,在类声明中首先声明重载函数的原型,在类体定义时分别对所声明的每个重载函数进行定义,例如:
class CPoint
{
...
void SetXY(int x,int y);
void SetXY(int x);
void SetXY(int y);
...
}
void CPoint::SetXY(int x, int y)
{
m_x=x;
m_y=y;
}
void SetXY(int x);
{ m_x=x;}

热心网友 时间:2023-10-09 22:24

首先要明白什么是面向对象。类是属性和操作的集合,看到本质后,然后通过实例的分析来加深类的印象好概念。就可以了。当然类的其他附属的知识及语法是需要理解的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
这是个成本会计题,马上要考这道原题了,求大虾帮忙 财务管理类问题,求大虾帮忙,小弟感激不尽。具体问题看问题补充。_百度... 光影魔术手怎么换底色 光影魔术手换底色教程 ...米的绳子围绕一棵树干饶了6圈,还余下1.16米,这棵树干上的直径大约是... ...还余下1.16米,这棵树的树干的直径大约是多少米?求算式! ibm x3500 M5 服务器 运行时风扇声音好大,吵死了,可以下掉一个吗... IBMX3500 M5,最近老是出现自动关机的情况,需要把服务器电源拔掉半分钟... 治疗萎缩性胃炎的方法 怎么治萎缩胃炎 JYF-40FS06电饭煲190块买的是假的吗 碾转怎么做好吃 碾转如何做好吃 九宫飞星入门绝学,效果显见 钨的用途 钨的用途介绍 电脑同时安装了WPS和office,怎么把WPS安在office里的插件删掉,office无法正常使用了? 电脑显示哎奇艺与什么软件有冲突,然后电脑字变得很大,然后电脑显示什么停止运行,要重启,爱奇艺这是怎 爱奇艺会员绑定手机号显示哎?120.82.10.20被封了什么意思 谁有爱奇艺会员哎,给俺用用 爱奇艺,看不了哎。 爱奇艺显示 哎?103.192.132.52被封了 是怎么回事 真假玳瑁的辨别 朱徽茵是军统还是地下党 朱徽茵是什么身份? 伪装者中朱徽茵真实身份是什么? 伪装者朱徽茵真实身份是什么? 玉米应该煮多长时间 玉米应该煮的时长 新手开户应该注意什么?有什么炒股开户攻略可以推荐吗? 在证券公司开户以后,怎样才能买到合适的股票?具体应该怎么操作? 千瓦时/24小时0.60是什么意思想知道我的冰箱是否省电?谢谢! 馒头蒸好后需要闷多久 馒头蒸好后需要焖多长时间 别人登录注销了,密码找回来了,怎么自己取消注销呢 一什么砖窑 透了造句-用透了造句 论文研究方向一般填写哪些 毕业论文的课题方向怎么定? 成都北大青鸟:Android开发程序员需要知道几件事情? 请问有没有上月期末库存自动转为下月的期初库存的方法除复制粘贴这种方法 海南北大青鸟:Android开发程序员需要知道几件事情? 中华时报的主要内容 洗衣机没用时,清水放在洗衣机里面泡,可以么,对洗衣机有没影响? 请问仓库库存帐怎么样转入下一个月? 中国时报是谁办的 在电脑上做仓库出入库时,月底结存的数量怎样移到下个月月初库存量呢?_百度问一问 会计学是什么专业类别 会计学是哪个专业类别 梦见鲸鱼是什么寓意 wps库存如何把上个月的现库存变成这个月的原库存 湖南北大青鸟:Android开发程序员需要知道几件事情? 2016年安徽省公务员考试真题题库? 安徽省公*历年真题全部 谁有啊,能不能给我发份,我准备备考2013年的 谢谢,最好带答案的, 苹果6s可以刷北京地铁吗 辛弃疾思念亡妻