类与对象

1、类的声明

class 类名
{
public:

protected:

private:

}; 

public: 既可以被本类的成员函数访问,也可以在类的作用域内被其他函数访问。

protected: 可以被本类及其派生类的成员函数访问,但不能被类外访问。

private:仅可以被本类的成员函数访问,不能被类外访问(类的友元除外)。


2、类的成员函数

类的成员函数一般的做法是将需要被类外部调用的成员函数声明为公用的,它们是类的对外接口,不需要被类外部调用的成员函数声明为私有的。 

一般在类内声明成员函数,在类外定义成员函数,这是软件工程中的良好的编程风格,不仅可以减少类体的长度,而且有利于把类的接口和类的实现细节分离。

当类中的成员函数是在类内定义时,C++系统会默认该成员函数时inline成员函数,系统会使用inline成员函数的机制去处理它,所以一般比较短但是调用频率比较高的成员函数可以在类内定义。在类外定义成员函数时,如果希望定义inline函数,则需要在成员函数声明和成员函数定义这两处(只要一处即可,两处也行)声明inline,写上inline关键字,但是这样处理是不好的风格,必须将类的声明和inline成员函数的定义写在同一个文件里(类声明头文件),类的接口和实现没有分离,不利于信息的隐藏。

C++为类的对象分配内存空间时,只为对象的数据成员分配内存空间,而将对象的成员函数放在另一个公共的区域,无论这个类声明多少个对象,这些对象的成员函数在内存中只保存一份。

3、对象成员的访问:对象名和成员运算符、指向对象的指针、对象的引用(一般用于传递函数参数)。

4、构造函数:初始化对象的数据成员,在使用参数初始化表的方式进行初始化时,按照类定义的数据成员的顺序,依次赋值,构造函数也可以重载,考虑将来创建对象的各种情况,编写多个构造函数。对象数组的初始化:分两种情况,只有一个参数:Box boxs[3] = {10,20,30}; 多于一个参数的情况:Box boxs[3]={Box(1,3,5),Box(2,4,6),Box(3,6,9)};

5、析构函数:在系统释放对象占用的内存之前进行一些清理工作,把对象所占用的额外内存空间归还给系统,没有参数,不能重载,在对象生命周期结束时由系统自动调用。调用顺序:先构造的后析构,后构造的先析构,类似于栈。

6、对象指针:对象在内存中的首地址。1)、保存对象指针的变量称为指向对象的指针变量,简称指向对象的指针。2)、指向对象成员的指针(只能访问公用的成员):指向对象数据成员的指针、指向对象成员函数的指针

指向对象数据成员的指针: 与普通指针完全相同

指向对象成员函数的指针:定义时 需要在指针名前面加上成员函数所属的类名及域运算符“::”,并且要匹配指向函数的参数类型及个数和返回值类型,还要匹配将要指向函数所属的类。

定义格式:

返回值类型(类名::*指针名)(参数表);

使用格式:

指针名=&类名::成员函数名;

调用格式:

(对象名.*指针名)(实参表);

float (Box::*p)();

p=&Box::Volume;

cout<<(box.*p)();

3)this指针:每个成员函数所包含的特殊指针,指向被调用成员函数所在的对象。即调用哪个该对象的成员函数,this指针就指向哪个对象。在成员函数内部访问数据成员的前面隐藏着this指针。它通过参数隐式传递给成员函数。

7、对象与const

const 对象,常对象,所有的数据成员不能修改。只能调用该对象的const 型成员函数(除了自动调用的隐式构造函数和析构函数) float Volume() const; 只读成员函数,只能访问而不能修改任何数据成员的值。 

mutable 可以将常对象声明为可变的数据成员,在const的成员函数中,可以修改。

常对象成员

1) 常数据成员  在初始化时必须使用构造函数的参数初始化表。

Box::Box(float l,float w,float h):length(l)

{

width = w; height = h;

}

2) 常成员函数

如果出现了修改对象的数据成员的值,就会编译报错。

类-->const型数据+非const型数据

const型成员函数-->只能访问,不能修改   非const型成员函数-->访问,修改 非const数据 ,访问,不能修改const数据

常对象-->const 对象-->   只允许const型函数访问,不能修改,不允许非const成员函数访问。

const型成员函数不能调用非const成员函数

通常在定义类时,应该将不会修改数据成员的函数声明为const型。

3)指向对象的常指针

4)指向常对象的指针  通过该指针只能调用对象的const型成员函数,一般用作函数的形参。保证实参对象的安全性

5)对象的常引用  通过常引用只能调用对象的const型成员函数,一般用做函数的形参。保证实参的对象的安全性

6)对象的动态创建与释放 new 和 delete

7)对象的赋值 与 复制(①程序中需要新创建一个对象,并用另一个同类的对象对它初始化② 函数的参数是类的对象,③ 函数的返回值是类的对象。复制构造函数只有一个形参,这个形参就是本类对象的引用)









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值