🐌博主主页:🐌倔强的大蜗牛🐌
📚专栏分类:C++
❤️感谢大家点赞👍收藏⭐评论✍️
一、面向过程和面向对象初步认识
面向对象的概念:
面向对象(Object-Oriented Programming,OOP)是一种编程思想,它以对象为基础来设计和构建软件系统。在面向对象编程中,对象是核心概念,它代表现实世界中的实体或概念,并具有属性(数据)和方法(操作数据的函数)。
面向对象编程的主要特点包括封装、继承、多态和抽象。封装隐藏了对象的内部实现,只提供有限的接口与外界交互;继承允许一个类继承另一个类的特性,实现代码复用;多态让不同类的对象能够以统一的方式被处理;抽象则是对现实世界的简化,以便于理解和建模。
面向对象编程的优势在于提高代码的可重用性、可维护性和可扩展性,使软件系统更加符合现实世界的需求和逻辑。
二、类的引入
typedef int DataType;
struct Stack
{
void Init(size_t capacity)
{
_array = (DataType*)malloc(sizeof(DataType) * capacity);
if (nullptr == _array)
{
perror("malloc申请空间失败");
return;
}
_capacity = capacity;
_size = 0;
}
void Push(const DataType& data)
{
// 扩容
_array[_size] = data;
++_size;
}
DataType Top()
{
return _array[_size - 1];
}
void Destroy()
{
if (_array)
{
free(_array);
_array = nullptr;
_capacity = 0;
_size = 0;
}
}
DataType* _array;
size_t _capacity;
size_t _size;
};
int main()
{
Stack s;
s.Init(10);
s.Push(1);
s.Push(2);
s.Push(3);
cout << s.Top() << endl;
s.Destroy();
return 0;
}
上面结构体的定义,在C++中更喜欢用class来代替。
三、类的定义
类的两种定义方式:
#include<iostream>
class MyClass {
public:
// 成员函数声明和定义
void printHello() {
std::cout << "Hello, World!"<< std::endl;
}
int add(int a, int b) {
return a + b;
}
};
int main() {
MyClass obj;
obj.printHello(); // 输出 "Hello, World!"
int sum = obj.add(1, 2); // sum = 3
std::cout << "Sum: "<< sum<< std::endl;
return 0;
}
在这个示例中,`MyClass` 类包含两个成员函数:`printHello()` 和 `add()`。这两个函数的声明和定义都放在类体内。当编译器看到这些成员函数的定义时,它们可能会被视为内联函数,从而提高程序的性能。然而,这也可能导致代码膨胀,因此在实际编程中需要权衡利弊。
2. 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::
myclass.h
文件:
#ifndef MYCLASS_H
#define MYCLASS_H
class MyClass {
public:
// 成员函数声明
void printHello();
int add(int a, int b);
};
#endif // MYCLASS_H
myclass.cpp
文件:
#include "myclass.h"
#include<iostream>
// 成员函数定义
void MyClass::printHello() {
std::cout << "Hello, World!"<< std::endl;
}
int MyClass::add(int a, int b) {
return a + b;
}
main.cpp
文件:
#include "myclass.h"
int main() {
MyClass obj;
obj.printHello(); // 输出 "Hello, World!"
int sum = obj.add(1, 2); // sum = 3
std::cout << "Sum: "<< sum<< std::endl;
return 0;
}
在这个示例中,
MyClass
类的声明放在了myclass.h
文件中,而成员函数的定义放在了myclass.cpp
文件中。这样可以避免头文件中的重复包含,同时也有助于代码的模块化和组织。在main.cpp
文件中,我们只需要包含myclass.h
头文件,即可使用MyClass
类的功能。
四、类的访问限定符及封装
- 访问限定符
【访问限定符说明】
- public修饰的成员在类外可以直接被访问
- protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
- 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
- 如果后面没有访问限定符,作用域就到 } 即类结束
- class的默认访问权限为private,struct为public(因为struct要兼容C)
注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别
问题:C++中struct和class的区别是什么?
C++需要兼容C语言,所以C++中struct可以当成结构体使用。另外C++中struct还可以用来定义类。和class定义类是一样的,区别是struct定义的类默认访问权限是public,class定义的类默认访问权限是private。
- 封装
面向对象的三大特性:封装、继承、多态。
封装本质上是一种管理,让用户更方便使用类。
在C++语言中实现封装,可以通过类将数据以及操作数据的方法进行有机结合,通过访问权限来
❤️结语:
本次精彩内容已圆满结束!希望各位读者在阅读过程中能够收获满满。在此,特别感谢各位读者的支持与三连赞。如果文章中存在任何问题或不足之处,欢迎在评论区留言,蜗牛必定会认真对待并加以改进,以便为大家呈现更优质的文章。你们的支持与鼓励,将是博主不断前进的最大动力。再次感谢大家的陪伴与支持!