C++ OOP基础
2022/2/25 9:21:29
本文主要是介绍C++ OOP基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C++ 为什么选择OOP
OOP是Object Oriented Program
- 不封装存在很大的安全隐患(数据暴露,可以被直接修改)
- 不符合数据类型的定义,使用封装实现OOP
1. non-OO Solution 非面向对象的解决方案
//non-OO Solution #include <stdio.h> #define STACK_SIZE 00 struct Stack{ int top; int buffer[STACK_SIZE]; }; //push和Stack是相关的,但是不是显式相关 bool push(Stack &s, int i){ if(s.top == STACK_SIZE - 1) { printf("Stack is overflow.\n"); return false; }else{ s.top++; s.buffer[s.top] = i; return true; } } bool pop(Stack &s, int &i){ if (s.top == -1){ printf("Stack is empty.\n"); return false; }else{ i = s.buffer[s.top]; s.top--; return true; } } void main(){ Stack st1, st2; st1.top = -1;//安全隐患 st2.top = -1;//安全隐患 int x; push(st1,12); pop(st1,x); //可以直接操控其中的数据 st1.buffer[2] = -1;//违背ADT st2.buffer[2]++; //违背ADT }
2. OO Solution 面向对象的解决方案
- cfront:用来进行检查一些访问权限的问题。
#include <iostream.h> #define STACK_SIZE 100 class Stack { private: int top; int buffer[STACK_SIZE]; public: Stack(){ top = -1; }//定义的构造方法 bool push(int i); bool pop(int& i); }; bool Stack::push(int i);{ if (top == STACK_SIZE-1) { cout << "Stack is overflow.\n"; return false; }else{ top++; buffer[top] = i; return true; } } bool Stack::pop(int& i){ if (top == -1) { cout << "Stack is empty.\n"; return false; }else { i = buffer[top]; top--; return true; } } void main() { Stack st1,st2; int x; st1.push(12); st1.pop(x); //st1.buffer[2] = -1无法操作 //cfront用来检查 }
- 实际上,程序存储的时候并没有发生变化
struct Stack{ int top; int buffer[STACK_SIZE]; }; //this是指向自己的指针 //对象的函数至少都持有一个this bool push(Stack *const this,int i);{ if (top == STACK_SIZE-1) { cout << "Stack is overflow.\n"; return false; }else{ top++; buffer[top] = i; return true; } } bool pop(Stack *const this,int& i){ if (top == -1) { cout << "Stack is empty.\n"; return false; }else { i = buffer[top]; top--; return true; } } void main(){ Stack st1, st2; st1.top = -1; st2.top = -1; int x; push(st1,12); pop(st1,x); }
3. OOP 面向对象
- Concepts 面向对象概念
- Program = Object1 + Object2 + … + Objectn
- 对象:数据 + 操作
- 信息:函数调用
- 类
- Classify 分类
- Object-Oriented 面向对象
- Object-Based(Ada:基于对象的语言)
- Without Inheritance
4. OOP评价标准
- 高扩展性
- 质量
- 外部评价指标:正确性、效率、健壮性、可靠性、可用性、可重用性
- 内部评价指标:可读性、可维护性、可移植性
5. ENCAPSULATION(封装)
具体到markdown文件中
6. 对象类型的判断
6.1. 方法一:运行时判断
- 使用if…else
int i; if(typeid(i) == typeid(int) ) cout << "i is int" << endl ; else cout << "i is not int" << endl ;
6.2. 方法二:编译时判断
template<class T> void func(T t ){ cout << "i is not int" << endl ; } template<> void func<int>(int i){//特化 cout << "i is int" << endl ; } int i; func(i)
这篇关于C++ OOP基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27文件掩码什么意思?-icode9专业技术文章分享
- 2024-12-27如何使用循环来处理多个订单的退款请求,代码怎么写?-icode9专业技术文章分享
- 2024-12-27VSCode 在编辑时切换到另一个文件后再切回来如何保持在原来的位置?-icode9专业技术文章分享
- 2024-12-27Sealos Devbox 基础教程:使用 Cursor 从零开发一个 One API 替代品 审核中
- 2024-12-27TypeScript面试真题解析与实战指南
- 2024-12-27TypeScript大厂面试真题详解与解析
- 2024-12-26怎么使用nsenter命令进入容器?-icode9专业技术文章分享
- 2024-12-26导入文件提示存在乱码,请确定使用的是UTF-8编码怎么解决?-icode9专业技术文章分享
- 2024-12-26csv文件怎么设置编码?-icode9专业技术文章分享
- 2024-12-25TypeScript基础知识详解