目录
c语言是面向过程的,关注的是过程,分析求解问题的步骤,通过函数调用解决问题。一洗衣服为例:
C++是基于对象的,关注的是对象,将一件事拆分成不同的对象,靠对象之间的交互完成。
我们把洗衣机这个对象拆分开来看会有:加水、晃动、甩水等等方法。我们在这里可以理解为:许多个洗衣服需要用到的方法被整合在了洗衣机里面。这就是我们今天需要讲到的类。
类里面不仅仅只封装了函数,以上面那个洗衣机为例,它的类应该还需要封装洗衣机的型号、容量、进水量等等。这些被称为属性。 降到这个属性,c语言也有一个语法结构用于封装数据——结构体。c++的类就是由c语言里面的结构体升级得来的 。相较于c语言里的结构体,c++就可以封装函数了,这个函数就是我们说的方法。 另外提一嘴,struct在c++的语法结构下也可以将方法整合进去的。
- #include<iostream>
- using namespace std;
- #include<stdlib.h>
- typedef int DataType;
- struct Stack
- {
- void Init(size_t capacity)
- {
- a = (DataType*)malloc(sizeof(DataType) * capacity);
- if (nullptr == a)
- {
- perror("malloc fail");
- exit (-1);
- }
- _size = 0;//命名习惯
- _capacity = 0;
- }
- DataType* a;
- int _capacity;
- int _size;
- };
- void test()
- {
- struct Stack s;
- s.Init(4);
- }
- int main()
- {
- test();
- return 0;
- }
代码成功分运行了。
下面是类的写法,与结构体及其相似。
- class` Stack
- {
- void Init(size_t capacity)
- {
- a = (DataType*)malloc(sizeof(DataType) * capacity);
- if (nullptr == a)
- {
- perror("malloc fail");
- exit (-1);
- }
- _size = 0;
- _capacity = 0;
- }
- DataType* a;命名习惯
- int _capacity;
- int _size;
- };
我们习惯在类内部的变量名前加一个"_"以区别这个是类内的数据还是类外的数据。
- class className
- {
- //类体:由函数和成员变量构成
- };//注意分号
class是定义类的关键字,ClassName是类的名字,{}是类的主体。
类的定义一般将属性放在类的尾端,这是一种编程习惯,增加代码可读性的。
类的定义有两种:
1.声明和定义都放在类中,需注意:成员函数如果在类中定义,编译器可能会将它当做内联函数处理。
这就是定义在类里面的例子
- class Person
- {
- void showinfo()
- {
- cout << _name << "-" << _sex << "-" << _age << endl;
- }
- char _name;
- int _sex;
- int _age;
- };
2.类声明放在.h文件里面,成员函数声明放在.cpp文件里面,注意:成员函数前要加——类名::
一般来说更推荐第二种定义方式。
c++实现封装的方式:用类将对象的属性与方法结合到一起,让对象更完善,通过访问权限选择性的将起接口提供给外部的用户使用。
1. public 修饰的成员在类外可以直接被访问2. protected 和 private 修饰的成员在类外不能直接被访问 ( 此处 protected 和 private 是类似的,学习继承后就不一样了 )3. 访问权限 作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止4. 如果后面没有访问限定符,作用域就到 } 即类结束。5. class 的默认访问权限为 private , struct 为 public( 因为 struct 要兼容C)
【面试题】
面向对象的三大特性:封装继承多肽
在类和对象的阶段,主要是研究类的封装性,那什么是封装呢?
封装:将数据和操作数据的方法进行有机结合,影藏对象的属性和实现细节,仅对外公开接口来和对象交互。
封装本身是一种管理,让用户更方便管理使用类