绪论
上一章,我们将c++入门的基础知识进行了学习,本章其实才算真正的跨入到c++开始可能比较难,但只有我们唯有不断的前进,才能斩断荆棘越过人生的坎坷!
话不多说安全带系好,发车啦(建议电脑观看)。
思维导图:
要XMind思维导图的话可以私信哈
目录
1.面向过程和面向对象的认识
2.类的引入
3.类的定义(class)
3.1类的访问限定符
4.封装
5.类的实例化
6.类对象模型
6.1计算类对象的大小
7.this指针
1.面向过程和面向对象的认识
面向过程、面向对象的概念:
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题;而C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。(过程就是完成一个事所要实现的步骤,而面向对象则是面向人,人们需要什么需求)
2.类的引入
知识点:
在c++中将struct升级成了类,此时不同于C语言,我们可以在结构体中定义函数
细节(具体):
如此时,在数据结构中实现功能的函数都是分开来写的,而在c++中因为struct升级成了类,类就可以把其中要实现的函数功能直接放在结构体中。
练习:
写一个类来实现栈的基本结构:
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<stdlib.h> #include<assert.h> using namespace std; struct Stack { //成员函数 //在类域中不管声明的位置都能找得到 void Init(int DefaultCapacity = 4) { a = (int*)malloc(sizeof(int) * DefaultCapacity); if (a == nullptr) { perror("malloc"); return; } capacity = DefaultCapacity; size = 0; } void Push(int x) { if (size == capacity) { int* ptr = (int*)realloc(a, sizeof(int) * capacity * 2); assert(ptr); a = ptr; capacity *= 2; } a[size++] = x; } int Top() { assert(size); return a[size - 1]; } // .... 就不过多的写了,此处了解语法即可 void Destroy() { free(a); a = nullptr; capacity = size = 0; } //成员变量 int* a; int size; int capacity; }; int main() { Stack sk; sk.Init(20); sk.Push(1); sk.Push(2); sk.Push(3); cout << sk.Top() << endl;//栈顶元素3 sk.Destroy(); return 0; }
3.类的定义(class)
知识点:
基本语法和struct一样,只是换了个名称;class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略,类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数
语法:
class classname
{
//类体 ,有成员函数和成员变量组成
}; // 和结构体一样也要符号
3.1类的访问限定符
访问限定符:
publish(公有) 、 private (私有) 、 protect (保护)
1.public修饰的成员在类外可以直接被访问
2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4. 如果后面没有访问限定符,作用域就到 } 即类结束。
5. class的默认访问权限为private,struct为public(因为struct要兼容C)
使用类定义时的细节:
成员函数的声明和定义全部放在类体时需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理,默认类里的成员函数是内联函数
类声明放在.h文件中,成员函数定义放在.cpp文件中时(分源管理):成员函数名前需要加类名::(因为在该函数中的name,sex,age 需要来源而来源就是类 , 来确定他是一个类里的成员函数的定义)
附:一般可以在成员变量的前/后/最前main加上m加上 _ , 来区分局部变量和成员变量