第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;}
进阶例子收集
上一篇: curl_easy_init 多线程使用导致的崩溃
下一篇: Scrapy框架——安装Scrapy