C++之----类

什么是类?

  • 类是一种复杂的数据类型,它将不同类型的数据和与这些数据相关的操作封装在一起的集合体
  • 类是一种用户自定义类型
  • 类的结构是用来确定一类对象的行为的,而这些行为是通过类的数据结构和相关的操作来确定的
  • 类是面向对象程序设计方法的核心。在面向对象程序设计中,程序模块是由类构成的。

类的定义格式

//说明部分
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)};
指向数组的指针
可以指向一位对象数组,也可以指向二维数组
类名 (*指针名)[大小]
指针数组
是指数组的元素是指向对象的指针
声明
类名 *对象数组指针名[大小]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值