💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃个人主页 :阿然成长日记 👈点击可跳转
📆 个人专栏: 🔹数据结构与算法🔹C语言进阶
🚩 不能则学,不知则问,耻于问人,决无长进
🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍
文章目录
- 一、什么是面向对象?
- 1.面向过程:
- 2.面向对象:
- 二、从struct到class
- 三、访问限定符
- 四、class的引入
- 五、类的定义
- 1.标准格式
- 2.类的两种定义方式:
- (1) 声明和定义全部放在类体中
- (2) 声明和定义分离
- 3.注意事项
- 六、class 和 struct的区别
一、什么是面向对象?
1.面向过程:
我们刚开始接触计算机这门学科时,我们学习的第一个编程语言就是C语言,C语言是面向过程的一门语言。面向过程
是一种编程思想,它以实现功能的函数开发为主,需要详细处理每一个细节,通常以函数的形式来一步一步实现整个功能。这种编程方式更侧重于解决问题的整个过程。
例如:洗衣服这一行为:
2.面向对象:
面向对象是一种编程思想,它将现实世界中的事物抽象成一个个对象,通过对象之间的交互来完成程序的设计和实现。
它具有三大特性:封装
、继承
和多态
等特性,可以更加方便地进行程序设计和维护。
(1) 封装:指将对象的属性和方法封装在一起,对外部隐藏对象的实现细节,只暴露必要的接口。这样可以保证对象的安全性和可靠性,同时也方便了程序的调用和维护。
(2) 继承:指通过继承已有的类来创建新的类,新的类可以继承父类的属性和方法,并且可以在此基础上进行扩展和修改。这样可以减少代码的重复,提高代码的复用性和可维护性。
(3) 多态;指同一个方法可以在不同的对象上产生不同的行为,这样可以提高程序的灵活性和可扩展性。多态可以通过重载和重写来实现。
例如:洗衣服这一行为:
这里面一共有四个对象,也就是人,洗衣液,脏衣服,洗衣机。
具体实现过程是:人把洗衣液脏衣服放入洗衣机。
四个对象相互合作,从而实现洗衣服这一过程,然而,人并不知到洗衣机的具体是怎样洗衣服的,这也体现了面向对象的封装性。
二、从struct到class
在C语言中我们学习过结构体,它只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。在C++中,struct依然可以使用,它兼容了C语言中struct的所有用法,并将struct升级成为类。
- 成为类后,struct中现在不仅可以定义变量,还可以定义函数。它的优势可以体现在如下代码。
例如:在C语言中实现栈和队列中的函数名相同,但是,C语言中函数是写在全局的,不允许同名函数,必须要在函数名前加上表示。但是,使用C++的struct就可以很好的避免这个问题,
//定义队列
struct Queue
{
//一、定义队列
//头指针
QNode* head;
//尾指针
QNode* tail;
//链表长度
int size;
//二、定义栈的相关方法
//入队
void Push(QNode*){ }
//出队
DataType Top(){ }
};
struct Stack
{
//一、定义栈的相关变量
int* _array;
size_t _capacity;
size_t _size;
//二、定义栈的相关方法
//压栈
void Push(int x){ }
//出栈
DataType Top(){ }
};
int main()
{
//栈
Stack s;
s.Push(1);
cout << s.Top() << endl;
//队列
Queue q;
q.Push(6);
cout << q.Top() << endl;
return 0;
}
我们可以直接使用栈Stack的各种方法和队列Queue的各种方法,不用考虑同名的问题。
三、访问限定符
- 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
- 如果后面没有访问限定符,作用域就到 } 即类结束
四、class的引入
在上述例子中如果使用类来写这个栈是怎样的呢?如下代码:
class stack2
{
public:
//压栈
void Push(int x) { }
//出栈
DataType Top() { }
private :
int* _array;
int _capacity;
int _size;
};
int main()
{
stack2 Ss;
Ss.Push(9);
cout << Ss.Top() << endl;
}
五、类的定义
1.标准格式
在C++中类的定标准格式是:
class stack2
{
public:
//压栈
void Push(int x) { }
//出栈
DataType Top() { }
private :
int* _array;
int _capacity;
int _size;
};
- 类中由成员函数和成员变量组成
- 不要忘记最后的分号。
2.类的两种定义方式:
(1) 声明和定义全部放在类体中
如上面栈的代码,栈的声明和定义全部写在类中。
需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数
处理。
(2) 声明和定义分离
类声明放在.h文件中,成员函数定义放在.cpp文件中,
注意:成员函数名前需要加类名::
void Stack::Push(int x)
{
//.......
}
::
表示Push函数是Stack这个域中的。如果Push中有一个变量n,编译器会首先检查是不是当前局部变量中定义的,如果不是,则会去Stack这个域中去找。
3.注意事项
- class中定义的变量,惯例是private类型的。
- class中的访问限定符如果不写,默认是
private
; - 默认定义在类中的就是内联(
inline
) - 函数的声明和定义很好区分。就是是否有具体实现。
- 变量的声明就是还没有开空间,变量的定义就是已经赋值开辟空间了。
- 长的函数,声明和定义分离。
- 短小的函数,可以直接写在类中。
- 成员变量的命名前加
_
或者m_
,表示这个是内部成员里的
例如:在写一些初始化函数时,将值赋给类中的变量,这样写容易分不清楚哪个是成员变量
void Init(int year,int month,int day)
{
year = year;
month = month;
day = day;
}
为了便于区分,建议这样写:
void Init(int year,int month,int day)
{
_year = year;
_month = month;
_day = day;
}
六、class 和 struct的区别
- C++中struct可以当成结构体使用,还可以用来定义类。
- struct定义的类默认访问权限是public,class定义的类默认访问权限是private