什么是类?
- 类是一种复杂的数据类型,它将不同类型的数据和与这些数据相关的操作封装在一起的集合体
- 类是一种用户自定义类型
- 类的结构是用来确定一类对象的行为的,而这些行为是通过类的数据结构和相关的操作来确定的
- 类是面向对象程序设计方法的核心。在面向对象程序设计中,程序模块是由类构成的。
类的定义格式
//说明部分
class <类名>
{
public:
<成员函数和数据成员的说明或实现>
private:
<数据成员或成员函数的说明或实现>
};
//实现部分
<函数类型><类名>::<成员函数名>(<参数表>)
{
<函数体>
}
类体中不允许对数据成员进行初始化
比如
class clock
{
public:
void settime(int newh,int newm,int nwes);
void showtime();
private:
int hour(10), minute(20), second(45);
int hour,minute,second;
};
拷贝构造函数
class A{
int x,y
A(A &p){
x=p.x;y=p.y;
}
};
int main()
{
A a;
A b=a;//调用拷贝构造函数
}
内联函数
被替换而非被调用
函数体不要太复杂,不要有循环之类
提高了效率
在类中声明:函数体放在声明中;用inline关键字修饰
静态成员
static
是所有对象的
可以通过对象引用,也可以通过类名引用
静态数据成员
- 初始化:在类体外初始化
int A::s=0
静态成员函数
老师布置的关于类的作业
复数类
#include<iostream.h>
#include<cmath>
class fushu
{
public:
void setnumber(int shi,int xu);
void shownumber();
void Plus(fushu x);
private:
int shishu,xushu;
};
void fushu::setnumber(int shi,int xu)
{
shishu=shi;
xushu=xu;
}
void fushu::shownumber()
{
if(xushu>0)
{
cout<<"\n"<<shishu<<"+"<<xushu<<"*i";
}
else if(xushu<0)
cout<<"\n"<<shishu<<"-"<<abs(xushu)<<"*i";
else
cout<<"\n"<<shishu;
}
void fushu::Plus(fushu x)
{
cout<<"\n"<<"相加后为:"<<shishu+x.shishu<<"+"<<xushu+x.xushu<<"*i";
}
int main()
{
fushu A,B;
int a,b,c,d;
cin>>a>>b>>c>>d;
A.setnumber(a,b);
B.setnumber(c,d);
A.shownumber();
B.shownumber();
A.fushu::Plus(B);
return 0;
}
运行结果
时钟类
#include<iostream.h>
class clock
{
public:
void SetTime(int Newh,int Newm,int News);
void ShowTime();
private:
int Hour,Minute,Second;
};
void clock::SetTime(int Newh,int Newm,int News)
{
Hour=Newh;
Minute=Newm;
Second=News;
}
void clock::ShowTime()
{
cout<<"\n"<<Hour<<":"<<Minute<<":"<<Second;
}
int main()
{
clock d1;
int a,b,c;
cin>>a>>b>>c;
d1.SetTime(a,b,c);
d1.ShowTime();
return 0;
}
运行结果
指向类的成员的指针
通过指向成员的指针只能访问公有成员
指向数据成员的指针
- 声明
- 类型说明符 类::*指针名
- 初始化
int A::*ptr=&A::c;
- 通过对象名(或者对象指针)与成员指针结合来访问数据成员
A a;
a.*ptr=8;
A *b;
b->*ptr=8;
指向成员函数的指针
- 声明
- 类型说明符 (类名::*指针名)(参数表)
- 初始化
int (A::*pfun) (int)=A::fun;
- 通过对象名(或者对象指针)与成员指针结合来访问成员函数
A a;
a.*pfun(9);
A *p;
p->*pfun(9);
对象指针和对象引用作为函数参数
对象指针作为函数参数
- 传址调用
- 形参是对象指针,实参是对象地址值
对象引用作为函数参数 - 传址调用
- 比指针更简单直接
对象数组
A a[2]={A(1,1),A(2,3)};
指向数组的指针
可以指向一位对象数组,也可以指向二维数组
类名 (*指针名)[大小]
指针数组
是指数组的元素是指向对象的指针
声明
类名 *对象数组指针名[大小]