C学习笔记之类与对象(一).docx
文本预览下载声明
类和对象这一章都学什么?什么是类,什么是对象访问修饰符类的构造函数和析构函数this指针对象数组类作用域抽象数据类型一:什么是类,什么是对象类是一种将抽象转换为用户定义类型C++工具,它将数据和操纵数据的方法组合成一个整洁的包。是对实体的属性和行为的一般描述。(它是抽象的,比如人类)?类的一般定义格式如下:class?类名{public:成员函数或成员数据的说明private:数据成员或函数成员的说明};关键字public标识组成类的公共接口的类成员(抽象)关键字private标识只能通过公共成员(后面还有友元)访问的类成员(数据隐藏)【注1】【注2】对象【注3】由类产生,是类的实例化,它具有属性、行为和状态。行为一般会改变状态。对象是唯一的(理解为在内存占某一块确切的地址)【具体到某一个人,比如你父母(为什么是父母不是本人呢?因为后面还要学习继承)】记住路线:人(类)-父母(对象)-你(继承)和兄弟姐妹(多重继承)-子孙(多态)二:访问修饰符??????公有(public)【通过对象调用】? ? ??私有(protected)【出了这个类就不能使用(除了friend)】??????受保护(private)【只有自己和子类能用】? ? ? 类的公有函数提供操作该类的操作数据成员的方法,此函数被称为接口。把类的声明放入某个头文件中构成类的公有接口。? ? ? ?实现类成员函数:1.在外部定义成员函数时,使用作用域解析运算符(::)来标识函数所属的类。2.类方法可以访问类的private组件。? ? ? ?内联(inline,不是online)函数:? ? ? ? ? ? ? ?1.隐式声明和显式声明:? 定义位与类声明中的函数将自动成为内联函数(隐式声明)。在类外的函数体实现时,返回值类型前加上 ? inline(显式声明)。? ? ? ? ? ? ? ? ? 举个小例子:inline void Clock::showTime(){}? ? ? ? ? ? ? ? 2.在内联函数内不允许用循环语句和开关语句,只适合1~5行的小函数。引入内联函数的主要目的是:解决程序中函数调用的效率问题。当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置。(是不是有点类似于宏?)但是他们是有区别的:宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。内联函数可以很好解决宏产生的二义性【注4】,因为内联函数遵循类型和作用域规则。三:类的构造函数和析构函数:认识构造函数:在程序执行过程中,当遇到声明对象的语句时,程序会向操作系统申请一定的内存空间用于存放新建的对象。而构造函数的作用就是在对象被创建的时候利用特定的值构造对象,将对象初始化为一个特定的状态。构造函数也是类的一个成员函数。? ? ? ? 2. ?构造函数的特点:1构造函数的函数名和类名相同;?2没有返回值;3一个类可以有多个构造函数可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载;? ? ? ?3. ?什么时候调用构造函数:构造函数在对象被创建的时候被自动调用。如果类中没写构造函数,编译器会自动生成一个隐含的默认构造函数(调用时无需提供参数),默认构造函数的参数列表和函数体都为空。但如果你在类中定义了构造函数,编译器便不会生成隐含的构造函数。例:?classHandsomePeople{……}; ? ? ? //声明并定义好完整的类? ? ? ?//当我们用类去建立一个对象时,它首先调用类的构造函数HandsomePeopleSker; ? ? ? ? ? ? ? ? ? //调用类的无参数的构造函数HandsomePeopleSker(参数1,..);?//按参数个数不同,调用类中不同的构造函数4. ?怎么使用构造函数【注5】【注6】:如果构造函数的原型是这么声明的:HandsomePeople(char* p_Name,intp_Old,boolp_Sex);C++提供两种使用函数来初始化对象的方式。第一种是显式调用构造函数:HandsomePeopleSker = HandsomePeople(“MtSker”,22,TRUE);HandsomePeople* Sker = new HandsomePeople(“MtSker”,22,TRUE);这条语句创建一个HandsomePeople对象且初始化。并将该对象的地址赋给Sker指针,这种情况下对象没有名称,但可以使用指针来管理该对象。第二种是隐式调用构造函数:HandsomePeopleSker(“MtSker”,22,TRUE);5. ?认识析构函数:自然界万物都有生有灭,程序中的对象也一样。当用构造函数创建对象后,程序负责跟踪该对象,直到其过期为止
显示全部