C++之 类

来源:互联网 发布:kali破解指定端口 编辑:程序博客网 时间:2024/06/14 19:20

封装:

给定类型的每个对象含有两组成员:一组数据值,作为数据成员;一组操作,作为函数成员。

一个对象里的数据成员一般是隐蔽的,即外界不能直接访问该数据,但对象里的函数成员可以访问数据成员,函数成员是对象与外界的接口。

继承:

       继承是根据一个类型定义另一个类型的能力。假设有两个类型:BankAccountLoanAccountLoanAccount类型继承了BankAccount的所有成员即每个LoanAccount对象包含了BankAccount对象的所有成员,不仅如此,LoanAccount还可以定义自己的新成员。

 

定义类:

       创建类要用关键字class,并且定义的所有成员在默认情况下都是隐藏的,无法从类的外部访问。这称为类的私有成员,私有成员只能在该类的成员函数中访问。要想在类外访问类对象成员,必须要用关键字public。与关键字class恰好相反的是struct在默认情况下结构对象的成员是公共的。

       另外两个关键字也是访问指定符:private私有的类成员、proctected受保护的类成员,他们都不能在类外直接访问。

 

构造函数:

       构造函数一般用来初始化隐藏的数据成员。如果在类的定义中包含一个构造函数,类的对象就不能用花括号中的数据值进行初始化。类的构造函数常常与包含它的类同名,并且没有返回值,返回类型。类构造函数的主要作用是在创建类对象时,为它的所有数据元素赋予并验证初始值。

       例子:假设一个Box的类,类中的构造函数形式应为:Box(参数类型参数名…..) {类的数据成员=参数名在类外定义对象并初始化的形式:Box对象名(参数…);如类中没有定义构造函数,类外定义对象并初始化的形式:Box对象名={参数…..};

      

头文件的定义形式:

假设定义类Box.h

#ifndef BOX_H

#define BOX_H

….

….

#endif

 

       类和构造函数的定义可以放在结构定义的外部。在创建类时,只需要在类中声明构造函数即可,在类外在进行定义不过要用作用域解析运算符进行限定。类放在外部定义就是把类定义成单独的头文件在需要用到其的源文件中包含头文件即可。

       如果在类中声明的构造函数有参数列表,则在使用类创建对象时一定要有参数表,例如Box对象名(参数…);。

      除了在类的构造函数体中用显式的赋值语句来初始化对象的成员,还可以使用初始化列表初始化对象的成员。以Box为例:

Box::Box(double lvalue ,double wvalue ,double hvalue): length(lvalue) ,width(wvalue) , height(hvalue) {}

       无论把成员函数的定义放在什么地方,都可以在类的函数成员的函数体中访问类的所有成员。获取Box对象中私有数据成员的值的唯一方式是使用构造函数或成员函数,应确保可以通过成员函数设置或修改类的私有数据成员。

       可以在类中公共部分添加几个函数,返回数据成员的值,这类提取数据成员值的函数通常称为访问器成员函数。如果把这些函数的定义放在类定义的外部,就应把它们声明为inline。不仅如此可以在类的公共部分添加可以修改数据成员的成员函数,这类函数称为变异成员函数。

      

友元:

       友元可以访问类对象的任意成员,无论这些成员的访问指定符是什么。

类的友元函数:

       如果某个函数不是类的一个成员,但可以访问类的所有成员,这个函数就称为该类的友元函数。为了把函数看做是类的友元函数,必须在类定义中用关键字friend来声明它。为了把函数声明为友元,必须在类定义中把它声明为友元。

友元类:

       把一个类声明为另一个类的友元。友元类的所有成员函数都可以不受限制地访问原类的成员。类之间的友元关系不是双向的。

This指针:

       在执行任何类成员函数时,该函数都会自动包含一个隐藏的指针,称为this,该指针包含了调用该函数的对象的地址。

显式使用this:

       在使用对象选择成员时,可以使用直接成员访问运算符.;在使用对象的指针时,可以使用指针成员访问运算符à。This是一个指针,所以应使用指针成员访问运算符。

       如果把成员函数的返回类型指定为类类的指针,就可以从函数中返回this

       类中声明为const的成员函数不能修改类对象的数据成员,除非数据成员声明为mutable

原创粉丝点击