电商的推广方式有哪些,360优化大师官方下载,创新的宁波网站建设,如何创建链接今天来到了类和对象部分#xff0c;我们知道C语言是面向过程编程#xff0c;而C是面向对象编程#xff0c;那么怎么个具体实现方法呢#xff1f;简单来说#xff0c;就是C语言对结构体的定义和对结构体的操作是分开的#xff0c;这样就显得过程很独立#xff1b;而C是把…今天来到了类和对象部分我们知道C语言是面向过程编程而C是面向对象编程那么怎么个具体实现方法呢简单来说就是C语言对结构体的定义和对结构体的操作是分开的这样就显得过程很独立而C是把结构体和函数是定义在一起的当然在这里我们把结构体升级成了类这就是我们所说的类和对象中的类 下面我们来对比一下C语言和C中的不同我们用C语言写一个结构体和函数
#includestdio.h
#includeassert.h
typedef struct QueueNode {struct QueueNode* next;int val;
}QNode;typedef struct Queue {QNode* front;QNode* rear;int size;
}Que;void QueueInit(Que* pq) {assert(pq);pq-front NULL;pq-rear NULL;pq-size 0;
}void QueuePush(Que* pq, int x) {//......
}这是我们写C语言时的一些操作看以看到它的函数和结构体是分离的下面看一下C是怎么实现栈的
#includeiostream
using namespace std;
struct stack {int* _a;int _top;int _capacity;void Init() {_a nullptr;_top 0;_capacity 0;}void Push(int x) {//....}
};我们可以看到函数都写到了类的里面这就是面向对象的一个特征 而在正常的C中呢我们习惯把struct换成class并且引入访问限定符访问限定符有public意思是外部可以访问还有一个private意思是外部无法访问当然class如果不写访问限定符有的话是私有的而struct是外部可以访问的 我们在写类的成员函数时要把声明和定义分离因为默认在类里面定义的函数就是内联函数所以我们一般把短小的函数的定义放到类里面当作内联使用效率比较高而其它的函数则声明和变量分离 类或者是类创建的对象的大小只考虑成员变量而计算所有成员变量的大小时则要考虑内存对齐 下面是一个我写的关于内存对齐的一篇文章 链接内存对齐 那如果是一个类中没有成员变量呢那么它的大小就是一个字节这个字节不存储有效数据只能证明它存在过 不知道你有没有发现我在栈的初始化函数中没有传任何参数但是在函数定义时我还是能调用栈中的成员变量这是因为编译器会隐藏的传一个this指针这个指针就是指向你要操作的对象this指针不能显示的传但是能显示的用 这里的this指针是不能更改指向的 报错说左操作数必须为左值 下面有这样的一个程序判断这个程序会不会报错
这个程序其实是不会报错的因为虽然p是一个空指针但是我并没有去访问p指向的对象的成员变量我只是调用了一个函数并且这个函数的地址也没有存放在对象中而这个p-的意思仅仅是告诉编译器我调用的是A类中的函数 但凡改成打印_a的话它就会运行时崩溃