`
ribishuangba
  • 浏览: 290074 次
文章分类
社区版块
存档分类
最新评论

C++学习摘要之一:类和对象

 
阅读更多

第一章 类和对象

类和对象是面向对象程序设计的两个最基本、最重要的概念。所谓对象就是客观事务在计算机中的抽象描述;而所谓类则是对具有相似属性和行为的一组对象的统一描述。从程序设计语言的角度来说,类是一种数据类型,而对象是具有这种类型的变量。

1.类的定义

类定义的一般形式为:
class 类名
{
private
数据成员或成员函数
protected
数据成员或成员函数
public
数据成员或成员函数
};
<各成员函数的实现代码>
其中,class是定义类的关键字。类名是一个有效的标志符,且一般首字母大写。大括号括起来的部分是类说明部分,它声明了类的所有成员(包括数据成员和函数成员),这些成员从访问权限上分成三类,即私有(private)、公有(public)和保护(protected),其中默认权限为private。
类的private部分说明的成员,在类之外是不能存取的,只有类中的成员函数才能存取private的数据成员和成员函数。类的public部分说明的成员,可被程序中的任何函数或语句存取,public成员多为成员函数,用来提供一个与外界的接口,外界只有通过这个接口才可以实现对private成员的存取。类的protected部分说明的成员,不能在类之外存取,只有类的成员函数及其子类(派生类)可以存取protected的成员。

2.成员函数的定义

类中的成员函数可以在两处定义:一是将成员函数的定义直接写在类中,一般适合于成员函数规模较小的情况;二是在类的定义体中只写出成员函数的原型说明,而成员函数的定义写在类的定义之外,这种情况比较适合于成员函数体较大的情况,其定义格式为:
返回值类型类名::成员函数名(参数说明)
{
函数体;
}
此处的“::”符号称为作用域运算法(名空间分隔符),它是用来指明哪个函数属于哪个类或哪个数据属于哪个类。
需要说明的是,成员函数既可以是有参函数,也可以像普通函数一样,给形参指定默认值。

3.对象及指向对象的指针

对象是类的实例,定义对象之前一定要说明该对象的类。定义对象的一般格式为:
类名对象名表;
其中,对象名表中可以有一个或多个对象名,多个对象名之间用逗号分隔。
另外,也可以定义指向类类型的指针,其定义格式为:
类名*指针变量名;

4.访问对象的成员

访问对象的成员有以下两种格式:
(1) 对象名.成员名
(2) 指针变量名->成员名
第一种格式是利用对象和运算符“.”访问成员;而第二种格式是采用指向对象的指针和运算符“->”来访问成员,并且第二种格式中的指针变量必须已指向某个对象。

5.类成员指针

在C++语言中,除了可以定义指针对象外,还可以定义类成员指针。
类数据成员指针就是程序中定义的用于指向类中数据成员的指针变量,借助该指针变量可以访问它所指向的类中的数据成员(该数据成员必须具有public访问权限),但该指针变量不是类的成员,它只是程序中的一个指针变量而已。
类数据成员指针的定义格式如下:
类型类名::*指针变量名;
此处的“类型”要与类中数据成员的类型保持一致。
要使已经定义的类数据成员的指针变量指向类中某个数据成员时,可以通过以下语句:
类数据成员指针变量名=&类名::类数据成员变量名;
当类数据成员指针变量已经指向类中某个数据成员时,可以通过以下语句访问类中数据成员:
对象名.*类数据成员指针变量名;

6.this指针

在每一个类成员函数的形参表中都有一个隐含的指针变量this,该指针变量的类型就是成员函数所属类的类型。当程序中调用成员函数时,this指针变量被自动初始化为发出函数调用的对象的地址。
尽管我们在定义成员函数时没有看到this指针变量,也没有定义this指针变量,但是在成员函数的函数体内我们可以使用this指针变量,因为该指针变量使系统隐含给出的,我们不需要也不能在成员函数的形参表中对this指针变量进行显示说明。
类中成员函数有了隐含的指针变量this后,就可以保证用不同的对象调用成员函数是对不同对象的操作。

7.对象赋值语句

对于同一个类生成的两个对象,可以进行赋值,其功能是将一个对象的数据成员赋值到另一个对象中去,赋值语句的左右两边各是一个对象名。
如,已知一个类Example,则:
Example obj1,obj2;
obj2=obj1;//将对象obj1的数据成员赋给对象obj2

8.对象的作用域和生存期

在不同的位置以不同的方式定义对象时,其作用域和生存期是不同的,其原理与普通变量相同。可分为局部对象(不包括局部静态对象)、静态对象(局部静态对象和全局静态对象)、全局对象等。

9.堆对象

所谓堆对象是指在程序运行过程中,根据需要随时可以建立和删除的对象。堆对象被创建在内存中一些空闲的存储单元中,这些存储单元被称为堆。堆可以被创建的对象占有,可以通过删除堆对象而获得释放。
需要利用new运算符创建堆对象,利用delete运算符删除堆对象。堆对象的生存期是整个程序的生命期。如:
Example *p;//p为指向类Example对象的一个指针
p=new Example();//使用new给p分配内存空间
delete p;//使用delete释放p所指向的空间

10.对象数组

当一个数组的类型为类类型时,该数组中的每个元素都是该类中的一个对象,则这种数组就是对象数组。对象数组的定义格式为:
类名数组名 [数组大小];
如:
Example array[10];

表明array数组是一个一维对象数组,该数组有10个元素,从array[0]array[9],其中每个元素都是类Example的对象。

分享到:
评论

相关推荐

    《深度探索C++对象模型》(Stanley B·Lippman[美] 著,侯捷 译)

    对于“对象导向性质之基础实现技术”以及“各种性质背后的隐含利益交换”提供一个清楚的认识。检验由程序变形所带来的效率冲击。提供丰富的程序范例、图片,以及对象导向观念和底层对象模型之间的效率测量。 C++成山...

    GO语言学习文档,适合初级入门学习

    以下是针对C++程序员的一些学习拉摘要. 这文章主要讨论GO和C++的不同。 对于更一般的介绍,请另参网站其它文章: 概念不同 * GO没有带构建器和析构器的类. 取而代之的是继承阶级和虚函数, GO提供接口,...

    Apect c++ 教程 + 实例 +论文 +期刊 AOP 打包下载

    搜集了 万方数据库 相关论文 期刊 以及网上 这方面几乎所有网页 都是自己学习之后留下来的 免去了大家搜集资料整理的麻烦 万方账号还是找别人借的~~~ 网上这方面 特别是c++可谓少之又少 搜集不容易 所以资源分高些 ...

    JAVA上百实例源码以及开源项目源代码

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    STL 源码剖析(侯捷先生译著)

    3.4.1 迭代器相应型别之一value_type 090 3.4.2 迭代器相应型别之二difference_type 090 3.4.3 迭代器相应型别之三pointer_type 091 3.4.4 迭代器相应型别之四reference_type 091 3.4.5 迭代器相应型别之五...

    java j2ee 课程设计报告

    Java建立在C语言和C++基础之上,但Java摒弃了C和C++中许多不合理的内容,它具有简单高效、面向对象、不依赖于机器结构的特点,支持多线程、分布、和并发机制。用Java开发的应用软件在可移植性、健壮性、安全性等方面...

    JAVA上百实例源码以及开源项目

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    asp.net知识库

    C++ 泛型编程系列讲座之实施 泛型技巧系列:简单类型选择器 C# 泛型简介 我眼中的C#2.0新功能特性 泛型技巧系列:避免基类及接口约束 New Article 不该用Generics实现Abstract Factory的理由 C#2.0-泛型 C#2.0-...

    计算机程序设计语言发展史和对程序设计语言未来的看法.docx

    计算机程序设计语言发展史和对程序设计语言未来 的看法信息科学与工程通信一班比拉力江 买买提 20104055049 【摘要】 本文以自然辩证的观点探讨了汁算机语言的发展历程,运用自然辩证法的基本 理论、基本方法,系统...

Global site tag (gtag.js) - Google Analytics