C++ 关于类与对象(上篇) 详解
1.面向过程和面向对象初步认识
C语言是面向过程的
关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
例如在洗衣服的过程中,要拿取脏衣服,准备洗衣液,放进洗衣机清洗,从洗衣机中拿出衣服烘干,晾晒。
C++是基于面向对象的
关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
在洗衣服这件事情中
有四个对象:人,衣服,洗衣液,洗衣机
洗衣过程:人将衣服放进洗衣机,导入洗衣液,启动洗衣机,洗衣机会完成任务。
整个过程主要:人,衣服,洗衣液,洗衣机,四个对象之间的交互完成,人不需要关心洗衣机如何洗衣服。
例如美团外卖
面向过程主要是:点餐,分派骑手,骑手接单,商家完成订单,骑手送单,确认收到订餐。
面向对象:商家,用户,骑手之间的交互关系
在面向对象的系统中,其实中间的过程也需要经历,但是可以理解为后台这里主要关注对象之间的关系。
C++是基于面向对象但不是纯面向对象的语言,可以对象和过程两个混着写,如果后面理解深入需要再解释改善
2.类的引入
例子
这里 struct Stack 可以理解为结构体,也可以说 struct 是个类,Stack是类名,因为C++兼容C语言
主函数中,可以定义结构体st1,也可以定义类st2,但在C语言中不支持第二种定义
C++中的Stack类可以定义成员函数
C++兼并C语言,可以在类外面定义关于Stack的函数
C++中使用函数与C语言同理,可以调用函数,此外可以使用类中的成员函数,C语言不行
3.类的定义
class className
{
类体:由成员函数和成员变量组成
}; 一定要注意后面的分号
类的两种定义方式:
例子
成员变量命名建议
class Date
{
public:
void Init(int year)
{
这里的year到底是成员变量,还是函数形参?
year = year;
}
private:
int year;
};
class Date
{
public:
void Init(int year)
{
_year = year;
}
private:
int _year;
};
或者这样
class Date
{
public:
void Init(int year)
{
mYear = year;
}
private:
int mYear;
};
便于区分,不是必须这样,只是这样命名更规范易理解
4.类的访问限定符及封装
访问限定符
C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选 择性的将其接口提供给外部的用户使用
5.封装
6.类的作用域
class Person
{
public:
void PrintPersonInfo();
private:
char _name[20];
char _gender[3];
int _age;
};
这里需要指定PrintPersonInfo是属于Person这个类域
void Person::PrintPersonInfo()
{
cout << _name << " "<< _gender << " " << _age << endl;
}
7.类的实例化
用类类型创建对象的过程,称为类的实例化
int main()
{
Person._age = 100; // 编译失败:error C2059: 语法错误:“.”
return 0;
}
例子
8.类对象模型
如何计算类对象的大小
类对象的存储方式猜测
1.
对象中包含类的各个成员
2.
代码只保存一份,在对象中保存存放代码的地址
3.实际存储
例子
计算类内存空间
类中既有成员变量,又有成员函数
class A1 {
public:
void f1(){}
private:
int _a;
};
类中仅有成员函数
class A2 {
public:
void f2() {}
};
类中什么都没有---空类
class A3
{};
结论:
结构体内存对齐规则:与C语言同理,可以去看C语言笔记内存对齐的详细分析解释
9.this指针
this指针引出
关于调用成员函数是否始终是一个地址
int main()
{
Date d1;
d1.Init(2023, 7, 20);
//d1.Print();
Date d2;
d2.Init(2023, 7, 21);
//d2.Print();
return 0;
}
d1对象的Init函数地址与d2对象的Init地址不一定一样,虽然是一个函数,但是分别调用,在d1调用结束后函数里的临时this指针就销毁了,调用结束函数栈帧销毁。
当d2调用时是新的this指针,函数地址不同,Print函数同理
this指针不能理解成当前对象,他只是指向当前调用的对象
this指针不能理解成当前对象,他只是指向当前调用的对象,把当前对象的地址传给它了
this指针的特性
this 指针存在哪里?
例子
1.
2.
原文地址:https://blog.csdn.net/2301_76838975/article/details/143690775
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!