第4章:类与对象

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;}


进阶例子收集

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值