|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式系统程序设计 > 嵌入式程序设计语言 > 嵌入式C/C++程序设计要求 > C++程序设计基础 >
|
被考次数:1次
被考频率:低频率
总体答错率:47%  
知识难度系数:
|
由 软考在线 用户真实做题大数据统计生成
|
相关知识点:20个
|
|
|
|
对象是人们要进行研究的任何事物,从最简单的整数到复杂的机器都可看作对象。对象可以是具体的事物,也可以是抽象的规则、计划或事件。对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。
|
|
|
具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
|
|
|
|
|
|
类的定义由类头和类体两部分组成。类头由关键字class开头,然后是类名,其命名规则与一般标识符的命名规则一致。类体放在一对花括号中。类的定义也是一个语句,所以要有分号结尾,否则会产生编译错误。
|
|
|
|
|
|
|
|
(2)私有(private):成员只能被该类的成员函数访问。
|
|
|
(3)保护(protected):成员只能被该类的成员函数或派生类的成员函数访问。
|
|
|
数据成员通常是私有的;成员函数通常有一部分是公有的,一部分是私有的。公有的成员函数可在类外被访问,也称之为类的接口。
|
|
|
|
类是用户定义的数据类型(不占内存单元),它存在于静态的程序中(即运行前的程序)。而动态的面向对象程序(即运行中的程序)则由对象构成,程序的执行是通过对象之间相互发送消息来实现的,对象是类的实例(占内存单元)。
|
|
|
|
定义了类以后,就可以定义类类型的变量,类的变量称为对象。例如:
|
|
|
|
在所有函数之外定义的对象称为全局对象,在函数内(或复合语句内)定义的对象称为局部对象,在类中定义的对象称为成员对象。全局对象和局部对象的生存期和作用域的规定与普通变量相同。成员对象将随着包含它的对象的创建而创建、消亡而消亡,成员对象的作用域为它所在的类。
|
|
|
通过new操作创建的对象称为动态对象,其存储空间在内存的堆区。动态对象用delete操作撤销。例如:
|
|
|
|
|
对于创建的一个对象,需要通过调用对象类中定义的成员函数来对它进行操作,采用“对象名.成员函数名(实参表)”或“指向对象的指针->成员函数名(实参表)”的形式表示。
|
|
|
|
|
程序运行时创建的每个对象只有在初始化后才能使用。对象的初始化包括初始化对象的数据成员以及为对象申请资源等。对象消亡前,往往也需要执行一些操作,例如归还对象占有的空间。
|
|
|
C++中定义了一种特殊的初始化函数,称之为构造函数。当对象被创建时,构造函数自动被调用。构造函数的名字与类名相同,它没有返回类型和返回值。当对象创建时,会自动调用构造函数进行初始化。例如:
|
|
|
|
注意:对构造函数的调用是对象创建过程的一部分,对象创建之后就不能再调用构造函数了。例如,下面的调用是错误的。
|
|
|
|
构造函数也可以重载,其中,不带参数(或所有参数都有默认值)的构造函数称为默认构造函数。
|
|
|
对于常量数据成员和引用数据成员(某些静态成员除外),不能在声明时进行初始化,也不能采用赋值操作对它们进行初始化。例如,下面对y和z的初始化是错误的。
|
|
|
|
可以在定义构造函数时,在函数头和函数体之间加入一个对数据成员进行初始化的表来实现。例如:
|
|
|
|
当创建A的对象时,对象的数据成员y初始化成10,数据成员初始化成引用数据成员x。同理,x初始化为0的处理也可放在初始化表中。
|
|
|
如果类中有常量数据成员或引用数据成员,并且类中定义了构造函数,则一定要在定义的所有构造函数的成员初始化表中对它们进行初始化。
|
|
|
|
当对象销毁时,会自动调用析构函数进行一些清理工作。析构函数也与类同名,但在名字前有一个“~”,析构函数也没有返回类型和返回值。析构函数不带参数,不能重载。
|
|
|
若一个对象中有指针数据成员,且该指针数据成员指向某一个内存块,则在对象销毁前,往往通过析构函数释放该指针指向的内存块。对象的析构函数在对象销毁前被调用,对象何时销毁也与其作用域有关。例如,全局对象是在程序运行结束时销毁,自动对象是在离开其作用域时销毁,而动态对象则是在使用delete运算符时销毁。析构函数的调用顺序与构造函数的调用顺序相反。当用户未显式定义构造函数和析构函数时,编译器会隐式定义一个内联的、公有的构造函数和析构函数。默认的构造函数执行创建一个对象所需要的一些初始化操作,但它并不涉及用户定义的数据成员或申请的内存的初始化。
|
|
|
|
有时,可能需要一个或多个公共的数据成员能够被类的所有对象共享。在C++中,可以定义静态(static)的数据成员和成员函数。要定义静态数据成员,只要在数据成员的定义前增加static关键字。
|
|
|
静态数据成员不同于非静态的数据成员,一个类的静态数据成员仅创建和初始化一次,且在程序开始执行的时候创建,然后被该类的所有对象共享,也就是说,静态数据成员不属于对象,而是属于类;而非静态的数据成员则随着对象的创建而多次创建和初始化。
|
|
|
C++也允许定义static成员函数。与静态数据成员类似,静态成员函数也是属于类。在静态成员函数中,仅能访问静态的数据成员,不能访问非静态的数据成员,也不能调用非静态的成员函数。公有的、静态的成员函数在类外的调用方式为:
|
|
|
|
|
C++中定义了一个this指针,用它指向类的对象。this指针是一个隐含的指针,不能被显式声明。
|
|
|
|
根据数据保护的要求,不能在一个类的外部访问该类的数据成员,C++用private访问控制来保证这一点,对private数据成员的访问通常通过该类提供的public成员函数来进行。
|
|
|
在C++的一个类定义中,可以指定某个全局函数、某个其他类或某个其他类的成员函数来直接访问该类的私有(private)和保护(protected)成员,它们分别称为友元函数、友元类和友元类函数,通称为友元。例如:
|
|
|
|
友元的作用是提高程序设计的灵活性,是数据保护和对数据的存取效率之间的一种折衷方案。
|
|
|