Upload
korbin
View
133
Download
0
Embed Size (px)
DESCRIPTION
主要内容: 1 、类的声明和对象的定义; 2 、构造函数与析构函数; 3 、类数据成员和类成员函数; 4 、指向对象的指针;. 类和对象. 内建的类 : 如 string,ifstream,ofstream ; 类声明 (class declaration) ---- 创建类并且将类当作数据类型来使用。 类是一种用户自定义类型,定义形式: class 类名称 { public: 外部接口 protected: 保护型成员 private: 私有成员 }. struct 类名称 { public: 外部接口 - PowerPoint PPT Presentation
Citation preview
主要内容:
1 、类的声明和对象的定义;
2 、构造函数与析构函数;
3 、类数据成员和类成员函数;
4 、指向对象的指针;
类和对象 内建的类: 如 string,ifstream,ofstream ; 类声明 (class declaration)
---- 创建类并且将类当作数据类型来使用。 类是一种用户自定义类型,定义形式:
class 类名称{
public:
外部接口 protected:
保护型成员 private:
私有成员}
struct 类名称{
public:
外部接口 protected:
保护型成员 private:
私有成员}
class Date {
public:
void setDate( int y,int m,int d){year=y;month=m;day=d;}
int IsLeapYear()
{return(year%4==0&&year%100!=0)||(year%400==0);}
void PrintDate(){cout<<year<<month<<day<<endl;}
private:
int year,month,day;
};
Date date1, date2, date[10];
在 C++ 中,以类作为数据类型定义的变量就是对象。类声明描述了封装在类中的数据成员和成员函数。
数据成员 与一般的变量定义相同,但需要将它放在类的定义体中。 只有类型说明,无存储类说明,即把类的数据成员说明为
auto 、 register 和 extern 是无意义的 其类型可以是基本数据类型和复杂数据类型,或已定义好
的类对象。例如class N{ class M{
public: public:
//… //…
}; private:
N n;
}
对象成员
成员函数 在类中说明原型,在类外定义函数体实现,并在函数名前使用类名加以限定。也可以直接在类中定义函数体,形成内联成员函数。
允许定义重载函数和带缺省形参值的函数class point{ int i,j,k;public:
point() {i=j=k=0;}point(int I=6,int J,int K) { i=I; j=J; k=K; }void print(const char* msg=" ") const{ if(*msg) cout<<msg<<endl;
cout<<"i="<<i<<","<<"j="<<j<<","<<"k="<<k<<endl; }
};
C++ 的信息隐藏机制
在类中可以包含以下三种类型的数据和函数成员:私有类型( private )公有类型( public )保护类型( protected )
Private:
在关键字 private 后面声明,如果省略关键字 private ,那么必须紧跟在类的名称后面声明。
私有类型的成员只允许本类中的函数访问,而类外部的任何函数都不能访问。
Public:
在关键字 public 后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数。
Protected:
与 private 类似,其差别表现在继承与派生时对派生类的影响不同
成员选择符 成员选择符 . 和指针操作符– > 用来实现对类的数据成员和成员函数进行访问。 成员选择符 . 出现在类对象和类成员之间,用来访问数据成员和成员函数,但对象的使用者只能访问类的公有成员。 指针操作符– > 出现在类对象指针和类成员之间。
类范围 类的私有成员具有的性质,即类的私有成员仅由类的成员函数访问,公有成员可在类之外进行访问。 class 声明的类,其类成员在默认情况下具有类范围性质。
class 和 struct 的区别 使用 class ,类成员在默认状态下是私有的; 使用 struct ,类成员在默认状态下是公有的。
class person
{ int age; // 默认隐藏的数据成员
public: void setage(int n); // 指明暴露
int getage() const; // 不改变数据成员
private: char name[20]; // 指明隐藏
};
类成员函数的定义
成员函数的定义可在类声明之中进行,也可在类声明之外定义
成员函数在类声明之中进行定义,这种定义方式为内联(incline), 内联定义同时提供了成员函数的声明和定义。
通过 incline 声明成员函数时,可将原本定义在类声明之外的函数强制变成内联函数。
编译时在调用处用函数体进行替换 , 节省了参数传递、控制转移等开销。
注意:–内联函数体内 ( 最好 ) 不要有循环语句和 switch 语句。–内联函数的定义必须出现在内联函数第一次被调用之前。
例见 313。
类的使用 使用类的关键步骤: 类声明、对象定义以及客户服务请求 例见 314。
#include <iostream.h>class point{ int i,j,k;public:
point() {i=j=k=0;}point(int I,int J,int K) { i=I; j=J; k=K; }void print(const char* msg=" ") const{ if(*msg) cout<<msg<<endl;
cout<<"i="<<i<<","<<"j="<<j<<","<<"k="<<k<<endl; }
};void main(){ point p,q(1,2,3);
p.print("values of p");q.print("values of q");
}
例313
#include <iostream.h>class Watch{public:
void SetTime(int NewH=0,int NewM=0, int NewS=0);void ShowTime();
private: int Hour, Minute, Second;
};void Watch::SetTime(int NewH,int NewM,int NewS){ Hour=NewH;
Minute=NewM;Second=NewS; }
void Watch::ShowTime(){ cout<<Hour<<":"<<Minute<<":"<<Second<<endl; }void main(){ Watch myWatch; // 定义对象
myWatch.SetTime(); // 按默认值设置myWatch.ShowTime();myWatch.SetTime(8,30,30);myWatch.ShowTime();
}
例 314
堆栈类 问题的提出 举例说明 解决方案 类的实现
自己看书