C++类
我先讲一下new吧
我们的类其实说白了就是结构体的变种
结构体其实就是一种数据类型
我们的每一种数据都是需要内存分配的所以说类也是一种数据类型
嗯嗯
比如说有个class a;
class a{};
我们要引用这个类
我们一般定义数据是怎么定义
int num;
那么类其实也一样
类本身就是一种数据类型
所以我们可以用 类名+变量名的形式去声明
class a{};
a bianliang;
new其实就是一种申请内存的方式
他会开辟一个新的内存空间
然后返回开辟的这个地址
我们就可以把东西放进去了
这时候我们的new会根据我们声明的类型开辟 类型大小的内存返回地址 然后在这个地址把类a放进去 最后赋值到bianliang上
class a{};
a bianliang;
bianliang= new a();
那么实际上我们这里的bianliang就是一个地址
我们在结构体里我们指向地址是什么操作
->对吧a->name
函数是有类型的
执行函数的时候就要申请内存了
void占用4字节
void是空类型 不能返回的,能返回是因为这时候虽然为空类型 实际上分配了4个字节的大小
void*是空指针
这时候我们也可以用两种方法访问类种的类型
第一种:类名.数据
第二种:实质的东西->直接指向地址
所以说我们可以看到很多时候访问方法就可以用 a->方法名去访问
其实在后面的面向对象的语言里
所谓数据类型都是类
其实在后面的面向对象的语言里
所谓数据类型都是类
比如说c语言里没有一个数据类型叫string
为什么没有因为字符串的长度是不确定的
比如说 char a[15];
就可以封装一个数据类型
而c++因为有类的存在
我之前讲过所有的类都是数据类型
所以就可以通过一定手段动态申请内存来定义string
string就是一个封装的类
类可以拿过来当数据类型 所以我们可以当做是字符串类型
类其实就是这些东西,从底层理解就是这么个道理,我在这里简单讲一下多态和继承
实际上类只是比结构多了多了private和protect
这其实更多时候是为了继承做准备的
安全性是其次
结构体也是有继承的但是结构体因为是public的
但是结构体因为是public的,所以子项继承,其实相当于复制粘贴了
所以类安全性高,结构体把所有东西都公开了
这时候类的继承就有区别了
类只能继承public方法,而不能继承private方法
所以说我们可以在父类定义一些框架性质的东西
然后子类继承,然后已经子类再写自己的方法
大大提升了开发效率
多态的意思是什么?
交替的意思
就是我们可以对父类的一些方法进行重写
当然还有其他,比如虚函数 抽象类啥的
其实以上这些就已经很完美了
可是c++还有一个大发明
而且用这个类的某个方法每次都得new到一个变量,然后引用方法
例如说我们要找某一个类 会很麻烦
c++提出来一种思路叫命名空间
我们可以把某个类放到命名空间a里面
假使说这个类有个公开方法b
那么我们就可以a::b()这样就去使用
极大的节省了开发效率
当然一般来说开发规范的话我们建议是将具有相似特征的类放到某一个空间下
这时候其实讲的就差不多了
Java很聪明因为结构体是属于一个改革失败的产品
所以java直接就去掉了结构体
java时代ide已经很高级了
它对很多基本数据类型进行了安全封装,避免了很多溢出的情况
命名空间其实已经很优秀了,但是很多时候为了开发规范,很多人喜欢把文件放置到规范的目录 空间名取目录名的方式去弄
java干脆直接用了package放到某个包下面
这样就可以引用很方便
同时java还给package加入了权限
不同包之间保护类型不能直接访问
四种权限
public protected default private
同一类中√√√√
同一包中√√√
子类 √√
不同包中√