第二章 类和对象的特性笔记(上)

2.1 面向对象程序概述:传统计算机的运行是遵循顺序结构的,这种方法并不适用于规模较大、功能较复杂的场景,因此就出现了C++的面向对象类程序,可以将复杂的问题分解为多个简单问题来完成

2.1.1 基本概念

(1)对象:客观世界中的任何一个事物都可以看作成一个对象,任何一个对象都应该具有属性和行为两个要素。对象应能根据外界给的消息进行相应的操作。一个对象一般是由一组属性和一组行为构成的。在C++中,每个对象都是由数据和函数(即操作代码)这两部分组成的,函数是用来对数据进行操作的,用来实现某些功能。函数的调用就相当于对该对象传送一个消息

(2)封装与信息隐蔽:可以对一个对象进行封装处理。把数据和针对数据的操作封装在一起,形成一个类,这个类的部分数据(即属性)和成员函数(即功能)声明为私有(private),对外界屏蔽。这样大大的降低了操作的复杂度,只需要知道外部功能就能自由操作对象。在设计一个对象时,要周密的考虑如何进行封装,把不必要让外界知道的部分隐蔽起来,也就是说,把对象内部实现和外部行为分隔开。面对对象的程序一个重要特点就是封装性,封装的两种方式:a.把有关的数据和操作代码封装在一个对象中,形成程序中的一个基本单位,各个对象之间互相独立,互不干扰。b.把对象中的某些不封对外屏蔽,只留下与外界联系的接口接收外界的消息,这种对外界屏蔽的做法称为信息屏蔽C++对象中的共有函数就是对象的对外接口。外界通过调用共有函数,访问对象中的数据成员,完成指定的操作

(3)抽象:抽象的作用是表示同一类事物的本质。对象是具体存在的,如十个三角形是10个对象,这10个对象有相同的属性和行为(只是具体边长和值不同),可以将他们抽象为一种类型,称为三角形类型。在C++中,这个三角形类型就可以称为类,10个三角形就可以称为类的对象。类是对象的抽象,而对象是类的特例或者说是类的具体表现。

(4)继承和重用:如果在开发过程中已经建立了一个名为A的类,又建立了一个名为B的类,B只是在A的基础上增加了一些属性和行为,利用继承性就可以简化程序设计步骤,不用再从头设计一个新的类,只需在A的基础上增加一些新的内容即可,这个就叫继承机制。A是父类,也叫基类,B是在A中派生出来的,称为子类或者派生类。C++提供的继承机制,使得可以重用已有软件中的部分,大大节省了编程工作量,这个就是软件的重用

(5)多态性:不同的对象对同一消息做出不同的响应

2.1.3类和对象的作用

(1)类是所有面向对象的语言的共同特征

(2)基于对象的程序是类和对象为基础的。在程序中,一组数据与一组操作是相对应的。因此人们设想把相关的数据和操作放在一起,形成了一个整体,与外界相对分隔。这就是面向对象的程序设计中的对象,然后由多个对象加调用对象的消息构成了函数

算法+数据结构=对象       N*对象+消息=程序

消息的作用就是对对象的控制,程序设计的关键是设计好每一个对象,以及确定这些对象发出的命令,使各对象完成相应的操作

2.1.4 面向对象的软件开发

面向对象的程序设计一共分为五个步骤,即分析、设计、编程、测试、维护

2.2类的声明和对象的定义

2.2.1类和对象的关系:类是对象的抽象,而对象是类的具体实例

对象
抽象的具体的
不占用内存占用内存
不可以用来直接存储数据或执行操作

可以用来存储数据,也可调用来数据进行操作

2.2.2 声明类的类型

模板

calss 类名
{private:
    私有成员声明
public:
    共有成员声明
protected:
    保护成员声明

};

注意:class是保留字,声明类的类型;private,public,protected是成员限定符;在类的声明"}"后必须得有分号

成员访问限定符:private:私有成员申明,只能在类内访问,类外(元友类除外)不能访问

public:类中、类外作用域中皆可访问

protected:受本类的成员函数访问,也可由派生类成员函数访问

2.2.3定义对象的方法

(1)先声明类类型,然后再定义对象

a. class 类名  对象名;

class Student stud1,stud2;

b.类名  对象名;

Stdudent stud1,stud2;

两种方法是等效的,第一种是充C语言继承下来的。

(2)在申明类的同时定义对象

class Student{
public:
    void display(){
        cout<<"num:"<<num<<endl;
        cout<<"name:"<<name<<endl;
        cout<<"sex:"<<sex<<endl;
    }
private:
    int num;
    char name[20];
    char sex;
}stud1,stud2;

在定义Student类的同时,定义了Student类的对象

(3)不出现类名,直接定义对象

class{
private:
    .
    .
    .
piblic:
    .    
    .
    .

}stud1,stud2;

注意:直接定义对象,在C++中是合法的、允许的,但不提倡使用,在实际程序开发中使用第一种方法多一点,在小型程序中使用第二种方法多一点

2.2.4:类和结构体的异同

二者定义方式相同,但注意,用struct声明的类,如果对其成员函数不做声明,则默认是public

而class不做声明时,系统默认是private。

2.3类的成员函数

2.3.1 成员函数的性质

a.成员函数可以访问本类中的所有成员

b.吧需要外界调用的成员函数指定为public,作为类与外界的接口

c.指定为private的成员函数,是类中其他成员的工具函数

2.3.2 在类外定义成员函数

模板:

类型  类名 :: 函数名(形参表){
函数体
}

例:

class Student{
public:
    void display();        //公用成员函数原型申明
private:
    int num;
    string name;
    char sex;
};


void Student :: dispaly(){
    cout << "num" << num << endl;
    cout << "name" << name << endl;
    cout << "sex" << sex << endl; 
}

Student stud1,stud2;

注意:必须现在类体中做函数原型的申明

类外定义的优点:减少类体的长度,能够使类的接口和类的实现细节分离

2.3.3 内置成员函数

在C++中,默认在类内定义的成员函数是inline函数,如果在类外定义成员函数时,系统默认不把它当做inline成员函数,此时必须在声明函数时在函数前加inline关键字

2.3.4 成员函数的储存方式

同一类的不同对象中的数据成员的值一般是不想同的,而不同对象的函数的代码是相同的,不论调用的是哪一个对象的函数代码,其实调用的代码都是一样的。所以,C++只为对象的数据成员分配内存空间,一个类的所有对象共享一个成员函数的空间。

注意:1.不管成员函数在类内定义还是在类外定义,成员函数的代码段的储存方式都是相同的,都不占用对象的储存空间。

2.不要将成员函数的这种储存方式和inline(内置)函数的概念混淆。不论是否用inline声明,成员函数的代码段都不占用对象的储存空间。inline函数只影响程序的执行效率,而与成员函数是否占用对象的储存空间无关

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值