【1.1】c语言的类与对象

一、类的概念及基本语法

一个类别、数据类型——万物皆对象

  • 属性:亮度、电量、运营商……
  • 方法:开关机、调整亮度、发送短信……

共同特点(变量)→构成数据结构

归纳行为(函数)→操作数据结构(抽象)

定义类

看上去像“带函数的结构体”

使用类

int main( ) { int w,h; Rectangle r; // r是一个对象 cin » w » h; r.Init( w,h); cout « r.Area() « endl « r. Perimeter(); return 0; }

Rectangle r1, r2;
对象名.成员名
r1.w = 5; r2.Init(5,4); 
指针->成员名
Rectangle * p1=&r1, p2=&r2; 
p1->w = 5; p2->Init(5,4); 
引用名.成员名
CRectangle & rr = r2;
rr.w = 5; rr.Init(5,4);

声明、定义分离

class Rectangle{ 
public:
	int w,h;
	int Area(); //成员函数仅在此处声明 int Perimeter() ;
	void Init( int w_,int h_ );
};
int Rectangle::Area() { return w * h; }
int Rectangle::Perimeter() { return 2 * ( w + h); }
void Rectangle::Init( int w_,int h_ ) { w = w_; h = h_; }

访问权限

二、默认函数——构造、析构、复制构造、赋值与取址

三、特殊成员——this指针

并非对象的成员,是常量指针

每个对象可以使用 this 指针访问自己的地址

非 static 成员函数调用时,this 指针为隐式参数

用途:防止自赋值、返回以连续调用

四、函数模板与类模板

4.1 函数模板

实际问题中的需要:

对不同类型数据可用的排序函数 sort

template<class T>
return-type sort(...T...)

一个实际的输出函数:

template<class T>
void print( const T array[], int size){ 
	int i;
	for ( i =0; i<size; i++) cout<<array[i]; return;
}
int a[10]; print(a,10);

一个实际的输出函数:

template<class T1, class T2>
void print(T1 arg1, T2 arg2,string s, int k)
	{ cout<<arg1<<s<<arg2<<k<<endl; return; }

4.2 类模板

为了多快好省地定义出一批相似的类,可以定义类模板,然 后由类模板生成不同的类

数组是一种常见的数据类型,元素可以是:

  • 整数
  • 字符串
  • ……

类模板:在定义类的时候给它一个/多个参数,这个/些参数 表示不同的数据类型。在调用类模板时,指定参数,由编 译系统根据参数提供的数据类型自动产生相应的模板类。

类模板的定义:

template <class T>//类模板的首部,声明类模板的参数 
class Carray{
	T *ptrElement;
	int size; 
public:
	Carray(int length);
	~ Carray();
	int len();
	void setElement(T arg, int index); 
	T getElement(int index);
};

使用类模板声明对象:

Carray<int> arrayInt(50), *ptrArrayInt; //创建一个元素类型为int的Carray模板类,并声明该模板类
的一个对象、以及一个指针。

不同模板参数产生的模板类,不是同一个类

参考资料

北京大学 《数据结构与算法》 张铭、赵海燕、宋国杰、黄骏、邹磊、陈斌、王腾蛟

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn