吉林省住房和城乡建设厅网站6,南宁网站建设公司哪家好,中国建设银行移动门户网站,新闻门户网站建设一、面向对象和面向过程 面向过程#xff1a; 关注如何解决问题#xff0c;以及解决问题的步骤 面向对象#xff1a; 关注的解决问题的人-对象#xff0c;以及实现能解决问题的对象 抽象#xff1a;先找出(想象)能解决问题的对…一、面向对象和面向过程 面向过程 关注如何解决问题以及解决问题的步骤 面向对象 关注的解决问题的人-对象以及实现能解决问题的对象 抽象先找出(想象)能解决问题的对象分析该对象解决问题所需要的属性(成员变量)和行为(成员函数) 封装把抽象的结果封装成一个类类型(结构)并给类的成员变量、成员函数设置相对应的访问控制权限(public\private\protected) 继承 1、在封装类前先考虑现有的类是否能解决部分问题如果有则可以通过继承只需要在此基础上扩展即可从而缩短解决问题的时间 2、把一个复杂的大问题拆分成若干个不同的小问题给每个小问题设计一个类去解决最后把这些类通过继承合并成一个能解决大问题的类从而降低问题的难度 多态 发出一个指令系统会根据实际情况执行不同的操作这种特征称为多态(一个指令多种形态) 比如重载过的函数、当调用函数时会根据参数的不同调用不同的版本具体调用哪个版本在编译期间可以确定称为编译时多态 注意面向对象的细节的本质上还是面向过程因此面向对象不是解决问题的捷径而是以更高的维度去思考问题 二、类和对象 什么是类和对象 类是由程序员设计一种数据类型里面包含有成员变量、成员函数 而对象就是类的实例化可以理解为使用类类型创建的变量创建的过程叫做实例化 类的设计和对象的实例化 class 类名 { 成员变量; // 类中默认属性是private私有 public: 成员函数; }; 对象的实例化 方法1 类名 类对象名; 方法2 类名* 类对象名_p new 类名; 类的声明、实现、使用 1、在头文件中声明 class 类名 { 成员变量; public: 返回值 成员函数名(参数列表); }; 2、在源文件中实现成员函数 返回值 类名::成员函数名(参数列表) { // 在成员函数中可以直接使用成员变量、成员函数 // 不需要使用 . - 来表示访问 } 注意如果类的内容不多也可以直接在头文件中把成员函数实现 三、访问控制限定符 private 私有的被它修饰的成员只能在类内访问这是类的默认访问属性 设置为私有的是为了对类进行保护一般会把成员变量设置私有 public 公开的被它修饰的成员可以在任意位置访问 一般会把成员函数设置公开 protected 保护的被修饰的成员只能在本类内和它的子类中访问但不能在类外访问 四、构造函数 构造函数就是与类名同名的成员函数当实例化对象时它会自动执行当构造函数执行结束后对象才完成实例化 任务一般负责对类对象进行初始化、资源分配 class 类名 { int* p; public: 类名(参数) { p new int; } }; 1、构造函数必须是public否则无法实例化对象 2、构造函数可以重载可以有多个版本的构造函数(无参、有参) 3、带参数的构造函数的调用 类名 对象名(实参); // 使用实参调用有参构造 类名* 对象名 new 类名(实参); // 使用实参调用有参构造 4、默认情况下编译器会自动生成一个什么都不干的无参构造函数但一旦显式地实现了构造函数就不再自动生成该无参构造函数了 5、如果给有参构造设置了默认形参实例化对象时可以出现类似调用无参构造的语句但实际是调用有参构造 6、构造函数没有返回值 7、不能使用malloc给类对象分配内存因为它不会调用构造函数 五、析构函数 任务析构函数一般负责对类对象内容进行收尾工作例如释放资源、保存数据等 当对象销毁时会自动执行 class 类名 { int* p; public: 类名(参数) { p new int; } ~类名(void) { delete p; } }; 1、析构函数也必须是public 2、析构函数没有参数、没有返回值、不能重载 3、当类对象生命周期完结被操作系统自动释放(栈)或者通过delete手动释放(堆) 才会调用析构函数 4、构造函数必定执行但析构函数不一定会执行 5、不能使用free销毁类对象因为不会调用析构函数 6、如果没有显式地实现析构函数编译器也会自动生成一个什么都不做的析构函数 六、初始化列表 初始化列表是属于构造函数的一种特殊语法只能在构造函数中使用 class 类名 { const 成员1; 成员2; public: 类名(参数) : 成员1(val),成员2(val) // 初始化语句 val可以是常量、变量 { //成员1 val; 属于赋值语句 不是初始化 带const属性的成员就无法赋值 } }; 注意 1、初始化列表是先于构造函数执行初始化列表执行时类对象还没有实例化完成因此它是一种给const属性成员变量初始化的最佳方案 2、当参数名与成员名相同时初始化列表可以分辨出来可以同名 3、当成员中有类类型该成员的有参构造函数可以在初始化列表中调用