前言
最近在看《我是一个程序员》,这是一本由阿里服务器工程师写的工作总结,记录了他从校招进入阿里的懵懵懂懂,到成为 Leader 主导开发,从他的心路历程中确实学到蛮多东西,比如作为一个技术人员的工作态度:少抱怨,技术人就是来解决问题的,而抱怨解决不了任何问题.
面向对象编程的基础让我没花多久就开始入手 C++,在这篇笔记中,将重点记录 C++ 的多态,抽象以及内存等知识点.因为 C++ 的异常处理和 Java 在语法上没有差别(关键字以及异常类的继承关系和 Java 类似),所以不再记录异常处理的相关知识.
目录
- 抽象类
- 动态内存
抽象类
含有纯虚函数的类被称之为抽象类,定义如下:
virtual void method() = 0;
# include<iostream>
# include<cstring>
using namespace std;
class Player {
public:
virtual void pause() = 0;
void setName(string name){
_name = name;
}
void play(){
cout<<_name<<endl;
}
private :
string _name;
};
class FxPlayer : public Player{
public :
void pause(){
cout<<"暂停播放"<<endl;
}
};
int main(){
FxPlayer fxplayer;
fxplayer.setName("测试播放");
fxplayer.play();
fxplayer.pause();
return 0;
}
image.png
动态内存
内存区域划分为两个区域:
- 栈: 函数中所有的变量
- 堆: 用于动态分配内存的区域
new 运算符用来在堆内存中分配空间,
对象使用不同的创建方式,会使用到不同的存储区域,比如我们定义了一个 Person 类:
- Person person("名字") : person 在栈中占用空间
- Person * person = new Person(); 将在堆中占用空间
我们都知道 C++ 是没有虚拟机来处理内存回收的,需要手动回收内存,这时就需要用到 delete 操作符来清除对应的堆内存.
# include<iostream>
using namespace std;
class Test{
public :
Test(){
cout<<"构造函数"<<endl;
}
~Test(){
cout<<"析构函数"<<endl;
}
};
int main(){
Test*test = new Test();
delete test;
return 0;
}
image.png
网友评论