目录
一.初步了解面向过程和面向对象。
(1).C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
(2).C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
二、结构体和类
1.C++兼容C语言struct的所有用法;
2.struct同时升级成类,如下;
C语言需要typedef才能用Stack,而C++可以直接用Stack。
因为struct升级成了类,而类名就是类型,所以不需要加struct。
3.类里面可定义函数。
三、类的定义
3.1、类的定义
class Name { //成员变量 //成员函数 };//注意分号
1、class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。
2、类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。
3.成员变量习惯加个前缀或下划线,以便于区分局部变量:
3.2、类的定义方式
1、声明和定义全部放在类体中。
2、类声明放在.h文件,定义放在.cpp文件(常用);
3.3、成员函数的声明与定义
1、成员函数定义在类体里面,此时编译器可能会将其当做内联函数inline(具体是否展开还的看编译器)。
2、成员函数在类体里面声明,类外定义,此时注意定义时要加作用域操作符 “::”。
3、C++支持部分成员函数声明和定义都在类里面,部分成员函数声明和定义分开。
4、正确用法:长函数分开定义,短函数类里面定义。
四、类的访问限定符及封装
4.1、访问限定符
(1)、public(公有)
(2)、private(私有)
(3)、protected(保护)
4.2、访问限定符说明:
1. public 修饰的成员在类外可以直接被访问。2. protected 和 private 修饰的成员在类外不能直接被访问 ( 此处 protected 和 private 是类似的,后续深入讲解 )。3. 访问权限 作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止4. 如果后面没有访问限定符,作用域就到 “ } ” 即类结束。5. class 的默认访问权限为 private , struct 为 public( 因为 struct 要兼容 C)
五、类的实例化
5.1、概念
用类类型创建对象的过程,就叫类的实例化(类为抽象,对象为具体)
、
5.2、特点
1、 一个类可以实例化出多个对象, 实例化出的对象 占用实际的物理空间,存储类成员变量。2、不同对象的成员函数是同一个,函数指针地址相同,但不同对象的成员变量就不同。3、sizeof计算对象大小时,只计算成员变量的大小,并且遵循内存对齐规则,而成员函数不在对象里面,而是存储在一个公共区域,哪个对象要使用就自己调用。4、注意空类(无成员变量的类),对象大小为一字节,这个字节不存储有效数据,而是为了标识定义的对象存在过。![]()
六、this指针
先看下图:
上面提到不同对象的成员函数是同一个函数,那为什么上图中a1和a2的函数打印的值却不一样呢?
这就是this指针起到的作用,上面的代码其实等价于:
这样就能理解为什么打印结果不同了,因为有个隐式指针this用于接受不同对象的地址,在通过此地址打印不同对象的成员变量。只是this指针是被C++隐藏了,并且我们自己写的时候也不能显示的去写,就用this指针的机制。