类与对象嗯嗯

本文详细探讨了类的抽象与封装,包括数据抽象、行为抽象和封装实现,以及对象的使用、构造函数、复制构造函数、析构函数和对象引用。讲解了如何创建对象、访问成员、构造与析构过程,以及关键概念如构造函数与复制构造的自动生成与显式定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类与对象

1.类的抽象与封装

什么是抽象
即把描述人员的工号,姓名,年龄等静态属性抽成数据:(数据抽象)

int id;
string name;
int age;

把描述请假、统计工资等动态行为抽象:(行为抽象)

void qingjia();
void gongzi();

数据和函数都是类的组成部分,称之为成员。
再在上述基础上进行封装

class Date{
private:

public:

};

在类外部每个成员函数的格式如下:

返回类型 类名::成员函数名(参数列表) { 函数体 }

注意:在定义类的时候不能对数据成员进行赋值,因为类只是一种数据类型,不占用储存空间,而变量的值需要内存来存储。

对类进行实例化,即创建对象:
类是抽象的,不占用内存,而对象是具体的,占用储存空间。
下面是声明一个类对象的格式:

类名 对象名

2.对象的使用

1)".“运算符来访问成员
2)通过指向对象的指针”->"访问成员
3)通过对象的引用变量访问对象中的成员

对象名.成员函数名(参数列表)
对象名.数据成员名
stud1.display();
stdu1.num=100;

对象名->成员名
Time t,*p;定义对象t和指针p
p=&t;使p指向对象t
cout<<p指向的对象中的成员hour:p->hour<<endl;

Time t1;
Time &t2=t1;
cout<<t2.hour<<endl;
t1和t2共同占用一段储存空间,实际是一个对象,只是用不同名字表示罢了。

3.构造函数

构造函数与类同名,没有函数返回值类型,也没有函数返回值。
作用:初始化工作
原因:声明类的时候不能直接对数据成员赋初值
如果定义了构造函数,编译系统就不会再为其生成隐含的构造函数,所以如果需要用到无参构造函数(原先是系统自动生成),就得在类中显示定义,不然会出错。
在这里插入图片描述

4.复制构造函数

其唯一的形参必须是引用

Point(Point &p)
{
	x=p.x;
	y=p.y;
}

与普通构造函数一样,系统会自动生成一个缺省的拷贝构造函数

类名::类名(类名 &对象名)
{
	*this=对象名;
}

5.析构函数

~Point()

析构函数由~和类名构成。
1)指向对象的指针
在这里插入图片描述

2)指向类对象成员的:
类型说明符 类名::*数据成员指针名;
数据成员指针名=&类名::数据成员名;

int Time::*p1;
p1=&Time::t1.hour;

指向类成员函数

void(Time::*p2)();
p2=&Time::gettime;

gettime是函数名。

6.对象引用和参数传递

1.通过对象指针传递

void Add(Point *p);
//在main函数里
Point ob;
ob.Add(&ob);

2.通过对象引用传入
类名&对象名
class Point{
void Add(Point &p)//形参是对象引用
};
main函数里
Point ob(1,2);
ob.Add(ob)

比起指针传递,这个方式更加直接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值