欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第4章:类与对象

程序员文章站 2022-05-07 15:17:50
...

4.1 面向对象的思想

定义

设计方法:使用面向对象的观点来描述模仿并处理现实问题


源由

面向过程与面向对象比较:

(1)面向过程

重点:如何实现细节过程,将数据与函数分开;

特点:自项向下,逐步求精-功能分解

缺点:效率低,程序的可重用性差

(2)面向对象


用法

 


简单例子

 


详解

 


进阶例子收集

4.2 OOP的基本特点

定义

 


源由

 


用法

 


简单例子

 


详解

(1)抽象

抽象是具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程;

(2)封装

将抽象出的数据成员、代码成员相结合,将它们视为一个整体

目的是增强案例性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员

(3)继承与派生

是C++中支持层次分类的一种机制,允许程序员在保持原有类特性的基础上,进行更具体的说明;

(4)多态性

多态:同一名称,不同的功能实现方式;

目的:达到行为标识统一,减少程序中标识符的个数


进阶例子收集

4.3 类与对象

定义

类是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和行为两个主要部分;


源由

 


用法

声明形式:

class 类名称

{

public:

公有成员(外部接口)

private:

私有成员

protected:

保护型成员

};


简单例子


#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
using namespace std;

class A{//类
public:
	int publicData;
private:
	int privateData;
protected:
	int protectedData;
};
int _tmain(int argc, _TCHAR* argv[])
{
	A obj;//对象
	system("pause");
	return 0;
}		
	

详解

(1)公有类型:在关键字public后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数;

(2)私有类型:在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问

(3)保护类型:与private类似,其差别表现在继承与派生类影响不同

(4)成员函数:在类中定义原形,可以在类外给出函数体实现,并在函数名前使用类名加以限定。也可以直接在类中给出函数体,形成内联成员函数;

(5)对象:类的对象是该类的某一特定实体,即类类型的变量


进阶例子收集

 

4.4 构造函数与析构函数

定义

(1)构造函数:当创建对象的时候,系统自动执行的函数;

(2)析构函数:当对象被销毁时,系统自动执行的函数;


源由

 


用法

 


简单例子

#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
using namespace std;

class A{
public:
	A(){
		cout<<"执行构造函数"<<endl;
	}
	~A(){
		cout<<"执行析构函数"<<endl;
	}
};
void fun(){
	A obj;
}
int _tmain(int argc, _TCHAR* argv[])
{
	fun();
	system("pause");
	return 0;
}		
 //结果:
 //执行构造函数
 //执行析构函数
	

 

详解

(1)建立对象时,如果构造函数有参数,则可以将参数传进去;

(2)构造函数也可以重载,根据参数不同而调用不同的函数

(3)拷贝构造函数:拷贝构造函数是一种特殊的构造函数,其形参为本类的对象引用,如下:

class 类名

{public:

类名(形参);//构造函数

类名(类名 &对象名);//

拷贝构造函数

};


进阶例子收集

4.5 类的组合

定义

类中的成员数据是另一个类的对象


源由

 


用法

class 类名

{

类名2 对象名;

};


简单例子

#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
using namespace std;

class A{
public:
	A(){
		cout<<"A构造函数"<<endl;
	}
	~A(){
		cout<<"A析构函数"<<endl;
	}
};
class B{
public:
	B(){
		cout<<"B构造函数"<<endl;
	}
	~B(){
		cout<<"B析构函数"<<endl;
	}
	A aObj;
};

void fun(){
	B obj;
}

int _tmain(int argc, _TCHAR* argv[])
{
	fun();
	system("pause");
	return 0;
} 

//结果:
//A构造函数
//B构造函数
//B析构函数
//A析构函数

详解

原则:不仅要负责对本类成员数据赋初值,也要对对象成员初始化

类组合的构造函数声明形式:

类名::类名(对象成员所需的形参,本类成员形参):对象1(参数),对象2(参数),...


构造函数调用顺序:先调用内嵌对象的构造函数(按内嵌时的声明顺序,先声明者先构造)。然后调用本类的构造函数。(析构函数调用顺序相反)

若调用缺省构造函数(无形参的),则内嵌对象的初始化也将调用相应的缺省的构造函数

进阶例子收集

 

4.6 类模板

定义

使用类模板使用户可以为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型(包括系统预定义的和用户自定义的)


源由

 


用法

template <模板参数表>

类声明


简单例子

 


详解

定义一个类模板与定义函数模板的格式类似,必须以关键字template开始,后面是尖括号括起来的模板参数,然后是类名,其格式如下:

template

class 类名 {

...

 

};

在类定义体外定义成员函数时,若此成员函数中有模板参数存在,则需要在函数体外进行模板声明,并且在函数外前的类名后缀上加.

例如,成员函数在类定义体外定义为:

template

T complex::realcomplex()

{return real;}


进阶例子收集

 

相关标签: C++