类和对象详细介绍

1.1、类和对象基本概念
1.2、什么是对象?
1.3、什么是类?
2.1、类的声明
2.2、实例化对象
3.1、类的属性定义--数据成员
3.2、类的数据成员的特例-静态数据成员
4.0、类的方法--成员函数
4.1、类方法的定义
4.2、静态成员函数
4.3、成员函数的类别(const 的另一种用法)
5.0、特殊成员函数-构造函数 和 析构函数
5.1、构造函数的概念
5.2、构造函数的 声明 和 定义
5.3、构造函数的调用(带参数)
5.4、构造函数调用(不带参数)
5.5、构造函数声明(带有默认参数)
5.6、构造函数的重载
5.7、特殊构造函数--拷贝构造函数
5.8、析构函数
5.9、类和函数的联系
5.10、this指针

 

1.1、类和对象基本概念

(1)类和对象是面向对象程序设计中最基础,最重要的两个概念。

(2)在面向对象程序设计中,所有操作都是以对象为基础的。

(3)程序中的对象 是对 现实对象的抽象。

 

1.2、什么是对象

现实对象包括可感知的物体,以及思维中的概念;

例如:

汽车客运被看做是一个对象;学校作为一个概念也可以看成一个对象;

 

现实对象

有个特点:属性 和 行为的整体

示例:

一辆汽车具有车型、颜色 -》属性

并有启动,转向、刹车等-》行为

程序对象:

属性可以看做为数据;行为可以抽象为函数。

 

对象是:数据 和 函数 的集合。

对象是:一个完整的个体。

例如:

所有汽车都具有车型,颜色等属性,所有属性的个数相同,所有汽车都具有启动、转向、刹车等行为。


1.3、什么是类?

类:

类是指整个一类实物,一个类定义了一个模板;

类对 数据 以及 处理数据的方式(函数)进行封装;

 

汽车类:包括(汽车对象1、汽车对象2、汽车对象3)

 

 

类 -具体实例-》对象

类《-抽象----对象

 

类(class):

是将一组对象的 数据结构 和 操作相同的部分 抽出来 组成的集合,是 对象 的 共同特征 。

 

2.1、类的声明:

关键字class声明

 

class:只定义一种数据类型,并不分配内存单元;

成员访问指示符:

(1)public:

(公用成员,包括类的 属性 和 方法);

提供类的外部界面,它允许类的使用者来访问它。

(2)private:

(私有成员,包括类的属性和方法);

只能被该类成员函数访问,即只有类的本身能够访问它,任何类以外的函数对私有成员访问都是非法的。

(3)protected:

对于派生类来说,保护成员像是公有成员,可以任意访问。

但对于程序的其他部分来说,就像是私有成员不应许访问。

(4)类中的成员默认是私有的。

 

2.2、实例化对象

类是抽象的,不能赋值,但是 实例化的类 即 对象 能够赋值了,而且可以通过对象直接调用函数。

 

 

3.1、类的属性定义--数据成员

3.2、类的数据成员的特例-静态数据成员

static修饰;

在定义类对象时,不会为每个类对象复制一份静态数据成员,而是让所有类对象都共享一个静态数据成员。[无论new多少个,公共使用一个]

如:

class Student

{

static int counter;//用于记录学生人数

int id;

};

静态变量在定义时要进行初始化,虽然大多少编译器对静态变量会赋默认值,但还是应该自己进行初始化。

 

4.0、类的方法--成员函数

详讲解:一般定义方法,特殊的成员函数(构造函数 和 析构函数)

 

4.1、类方法的定义

又称类的成员函数,成员函数主要处理类的数据成员;

下面是 类体中的声明和定义 和类体外声明和定义

加载中...

 

4.2、静态成员函数

static修饰,在类的各个实例化间是共享的。(和静态属性定义意思差不多)

 

 

4.3、成员函数的类别(const 的另一种用法)

const放在 函数的参数列表 和 函数体之间。

const成员函数只能读类数据成员,而不能修改类成员数据。

 

 

5.0、特殊成员函数-构造函数 和 析构函数

定义类后,经常需要一一为 对象的 成员变量指定 初始值;

虚构函数 用于定义了 类的 对象数组 后进行 初始化。

 

5.1、构造函数的概念

类 包含 数据成员 和 成员函数;

一个类可以创建多个对象,创建对象后,需要为每个对象的数据成员赋初值。

但一一为多个数据成员赋初值是非常烦琐的;

并且在类中声明的数据成员,是不给数据成员赋初值的。

错误例子:

class A

{

int a=0;//错误,此处不能给数据成员a赋值

};

所以c++通常使用 构造函数 来解决 这个问题。

构造函数 的 定义 和 主要功能:

构造函数是在创建给定类型的对象时执行的类方法。构造函数具有与类相同的名称,它通常初始化新对象的数据成员。

在下面的示例中,定义了一个具有一个简单的构造函数,名为 Taxi 的类。然后使用 new 运算符来实例化该类。在为新对象分配内存之后,new 运算符立即调用 Taxi 构造函数。

public class Taxi
{
public bool isInitialized;
public Taxi() //构造函数 与类同名,可重载
{
//在类被实例化的时候自动调用 一般用于初始化 类的一些属性
isInitialized = true;
}
}

class TestTaxi
{
static void Main()
{
Taxi t = new Taxi(); //这时会自动运行Taxi类的构造函数Taxi()
System.Console.WriteLine(t.isInitialized);
}
}

不带参数的构造函数称为“默认构造函数”。无论何时,只要使用 new 运算符实例化对象,并且不为 new 提供任何参数,就会调用默认构造函数。

构造函数性质:

(1)构造函数的名字必须与类同名;
(2)构造函数没有返回类型,它可以带参数,也可以不带参数;
(3)声明类对象时,系统自动调用构造函数,构造函数不能被显式调用;
(4)构造函数可以重载,从而提供初始化类对象的不同方法;
(5)若在声明时未定义构造函数,系统会自动生成默认的构造函数,此时构造函数的函数体为空.
(6)静态构造函数,用static修饰,用于初始化静态变量,一个类只允许有一个构造函数,在类实
例化时加载,这时修饰符public、private失去作用.
(7)可以使用public、protected、private修饰符。.
(8)引用父类构造时用():base()方法,引用自身重载的构造使用():this(int para).
(7)可以使用public、protected、private修饰符。

 

 

5.2、构造函数的 声明 和 定义

 

实际应用中,一般都要给类声明和定义构造函数;

如果没有声明和定义,编译系统会自动生成一个默认的构造函数,这个默认的构造函数不带任何参数,只能给对象开辟一个存储空间,而不能为对象中的数据成员赋初值,此时数据成员的值是随机的。程序运行时可能会出错。

 

5.3、构造函数的调用(带参数)

在定义了构造函数后就可以调用,一般来说,在定义对象的同时调用构造函数。

 

注意:一般不需要显示调用,在声明对象时系统会自动调用构造函数。

 

5.4、构造函数调用(不带参数)

构造函数一般需要完成对类中私有数据成员的初始化,因此它需要包含参数完成对象的初始化。

事实上,构造函数可以不带参数。

 

5.5、构造函数声明(带有默认参数)

 

 

5.6、构造函数的重载

C++支持函数的重载,一个类中可以有多个不同参数形式构造函数。

用类去创建一个对象,也就是在内存中产生一个类的实例时,程序将根据参数在动调用该类中的构造函数。

增加了程序设计的灵活性。

同一个类中不同构造函数的区别:参数个数,参数类型。

 

注意:当定义带参数的构造函数时采用默认参数,在调用时若指定了参数值,则使用指定参数值。

 

5.7、特殊构造函数--拷贝构造函数

C++中除了普通的构造函数外,还有特殊构造函数--拷贝构造函数

 

分类:

1、用户自定义拷贝构造函数

 

 

例子2:系统默认拷贝构造函数。

当用一个已经存在的对象初始化本类的新对象时,如果没有自定义拷贝构造函数,系统会自动生成一个默认的拷贝构造函数来完成初始化的工作。

 

 

5.8、析构函数

与构造函数类似,析构函数也是一种特殊的成员函数。

作用:释放分配给对象的内存空间,并做一些善后工作。

 

例子:

 

5.9、类和函数的联系

(1)类对象可以作为函数参数,也可以作为函数返回值。

(2)类对象作为函数参数传递时,可以值传递和引用传递。

(3)类对象值传递时,实参中的成员变量目录中的变量被拷贝到形参中相应的成员变量。

 

5.10、this指针

是隐含在成员函数内的一种指针,称为本对象的指针。

作用:

(1)显示指明类中数据成员,尤其是和形参以及全局变量相区分。(当他们同名时)

(2)返回本对象的指针和引用。

在函数成员返回时:

如果需要返回该对象的指针,使用”return this“;

如果需要返回对象的引用时,使用”return *this“;

(3)类对象值传递时,实参中的成员变量目录中的变量被拷贝到新参中相应的成员变量。

posted on 2015-09-21 22:16  辞久  阅读(302)  评论(0编辑  收藏  举报