C++知识整理 - 类与对象的概念

主要内容

1)类外定义成员函数

2)内置成员函数

3)成员函数的存储方式


C++并不是一种纯粹的面向对象的语言,而是一种基于过程和面向对象的混合型语言。C++面向对象的机制就是为了解决编写大程序时遇到的困难。

面向对象的程序设计有4个主要的特点:抽象封装继承多态性。C++的类对象体现了抽象和封装的特征,在此基础上再利用继承和多态性,就成为真正的面向对象的程序设计。


 

对象

任何一个对象都应包括两个要素,属性和行为。属性为对象的静态特征,而行为是对象的动态特征。在C++中,每个对象都由数据和函数组成,数据相当于属性,而函数相当于行为。


 

封装与信息隐蔽

对一个对象进行封装处理,把内部实现外部行为分隔开,只留下少量接口与外界联系,C++类对象中的函数名就是对象的对外接口,外界可以通过函数名来调用函数实现功能。这样可以大大降低人们操作对象的复杂程度。

利用“封装性”将对象中的某些部分对外隐蔽,这种做法称为信息隐蔽,信息隐蔽有利于数据安全,防止无关的人了解和修改。


 

抽象

抽象的作用是表示同一类事物的本质。类是对象的抽象,对象是类的具体实例,即类的具体表现形式。


 

继承与重用

举个例子,如果已经跟人介绍了什么是“马”,那么再跟人介绍“白马”的时候只需说明“白马”是“白色的马”,省去了重新介绍马的过程。“白马”继承了“马”的特征,另外又增加了新的特征。“马”是父类(或称基类),“白马”是从“马”派生来的,称为子类(或派生类)。

C++提供了继承机制,采用继承的方法可以很方便地利用已有类建立一个新的类,这就可以重用软件中的内容,这就是常说的“软件重用”。


 

多态性

由继承而产生的不同的派生类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。


 

类的声明

class student

{

public:

    void display()

    {

        cout<<"name:"<<stu[i].name<<endl;

        cout<<"rank:"<<stu[i].rank<<endl;

        cout<<"average:"<<stu[i].score<<endl;

    }    

private:

    int rank;

    char name[5];

    double score;

};

需要注意的是,类的定义中系统默认为private,而结构体类型定义中默认为public。

private和public称为成员访问限定符。用它们来声明各成员的访问属性。private声明的成员只能被类中的成员函数或友元类调用。此外还有一种成员访问限定符protected,它声明的成员只能被成员函数或派生类的成员函数调用。

对象的定义方式跟定义结构体类型变量的方式类似。


 

成员函数

 

1)类外定义成员函数

class student

{

public:

    void display();

private:

    int rank;

    char name[5];

    double score;

};


void student::display()                  /*“::”是作用域限定符*/
{
		cout<<"name:"<<stu[i].name<<endl;
		cout<<"rank:"<<stu[i].rank<<endl;
		cout<<"average:"<<stu[i].score<<endl;
}

 

2)内置成员函数

如果在类体中定义成员函数,且函数不包括复杂的控制结构,C++系统会自动对它们作内置函数处理。这样可以大大减少调用成员函数的时间开销。

如果要在类外定义内置函数,只需在前面加上关键字inline。

 

 

3)成员函数的存储方式

一个对象所占的内存空间大小只取决于该对象中数据成员所占空间,而与成员函数无关。函数的目标代码是存储在对象空间之外的。

虽然成员函数并没有存放在对象的存储空间内,但从逻辑的角度,成员函数和数据一起封装在一个对象中,只允许本对象的成员函数访问同一对象的数据。

 

这里就有一个问题,不同的对象调用同一段函数代码,函数代码是怎么对不同对象中的数据进行操作的?

答:C++设立了this指针,调用某对象的成员函数时,this指针就指向该对象,成员函数访问的就是该对象的数据成员。

 

对象成员的引用与结构体类型变量的引用类似。


 

类声明和成员函数的定义分离

 

一个C++程序是由3部分组成的:(1)类声明头文件(后缀为.h);(2)类实现文件(后缀为.cpp),它包括成员函数的定义;(3)类使用文件(后缀为.cpp),即主文件。

在系统提供的头文件中只包括对成员函数的声明,而不包括成员函数的定义。只有把成员函数的定义单独放在另一个文件中,单独编译,才能做到不重复编译。

 

在实际工作中,并不是将一个类声明做成一个头文件,而是将若干个常用的功能相近的类声明集中在一起,形成类库。类库包括两个组成部分:(1)包括类声明的头文件;(2)经过编译的成员函数的定义,它是目标文件.obj。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值