【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
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn