摘要:
友元 友元可以理解为:朋友、元素;老师认为这个友元是C++中的一个垃圾,因为友元的存在破坏了面向对象的封装性,不推荐使用,之所以有这个章节是因为有人不了解这个概念。 注意:在一些新版本的C++编译器里面已经不再提供类似于友元这样的特性了。 大家都知道在C++中对象的私有成员,外部是无法访问的,这在面 阅读全文
摘要:
对象拷贝 我们通常存储对象,都用数组、列表之类的来存储,那如下所示我们使用数组来存储对象,但是在工作中发现这个数组不够用了,就需要一个更大的数据,但我们重新创建一个数组还需要把原来的数据复制过来;在C语言中可以使用函数来进行拷贝,直接拷贝内存,在C++中实际上跟C语言要做的事情是一样的,在C++中就 阅读全文
摘要:
模版 假设有一个冒泡排序的函数: void Sort(int* arr, int nLength) { int i, k; for (i = 0; i < nLength; i++) { for (k = 0; k < nLength-1-i; k++) { if(arr[k] > arr[k+1] 阅读全文
摘要:
运算符重载 现在有一个类,其中有一个函数用于比较2个类的成员大小: #include <stdio.h> class Number { private: int x; int y; public: Number(int x, int y) { this->x = x; this->y = y; } 阅读全文
摘要:
虚表 上一章了解了多态,那么我们来了解一下多态在C++中是如何实现的。 了解本质,那就通过反汇编代码去看就行了,首先我们看下非多态的情况下的反汇编代码: 然后再来看下多态情况下的反汇编代码: 很明显这里多态的情况下会根据edx间接调用,而非多态则会直接调用。 那么我们来看下间接调用的流程是什么: e 阅读全文
摘要:
面向对象程序设计之继承与封装 之前已经学习过继承和封装了,但是要在实际开发中使用,光学语法和原理是不够的,在设计层面我们需要做一些优化。 如下代码是继承的例子: #include <stdio.h> class Person { public: int Age; int Sex; void Work 阅读全文
摘要:
void main() { int x = 1; int& ref = x; ref = 2; printf("%d \n", ref); return; } 反汇编代码: int x = 1; 00724A5F C7 45 F4 01 00 00 00 mov dword ptr [x],1 in 阅读全文
摘要:
在堆中创建对象 我们可以在什么地方创建对象? 全局变量区,在函数外面 在栈中创建对象,也就是函数内 在堆中创建对象 注意:之前一直提到的堆栈实际上是两个概念->堆、栈,我们之前所讲的就是栈,从本章开始要严格区分。 在C语言中,我们可以通过一个函数去申请一块内存,就是malloc(N);申请的这一块内 阅读全文
摘要:
类成员的访问控制 课外 → 好的编程习惯:定义与实现分开写,提升代码可读性。 如下代码,Student这个类的所有成员我们都可以调用,但是我们不想让被人调用Print1这个方法该怎么? struct Student { int age; int sex; void Print1() { printf 阅读全文
摘要:
继承 struct Person { int age; int sex; }; struct Teacher { int age; int sex; int level; int classId; }; 如上代码中可以看见,Teacher类与Person类都存在着相同的2个成员age和sex,那么这 阅读全文
摘要:
构造函数与析构函数 构造函数 struct Student { int a; int b; Student() { printf("Look."); } void Init(int a, int b) { this->a = a; this->b = b; } }; 如上代码中,我们发现了存在一个函 阅读全文