




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*/一、面向对象编程1 什么是对象万物皆对象世界是由一组相互之间紧密联系的对象组成的。通过将对象按照属性、行为共性进行分类,达到将具体事物进行抽象的结果通过程序的语法表达对象属性和行为的抽象-面向对象将面向对象的思想用于编程的过程-面向对象(OOP)2 为什么面向对象?面向对象的编程思想适合于大型的软件的开发面向对象的方法能够有效的提高软件的开发效率借助强大的逻辑建模能力将问题域和方法域有机的统一起来软件工业的发展趋势3 怎么面向对象?熟练的掌握至少一种面向对象的语言精通至少一种面向对象的元语言,如:UML深入学习设计模式和面向对象的设计方法 GOF二、类学生属性:姓名、年龄行为:学习类就是通过对属性和行为的抽象,描述一组对象的语法结构1类的定义class class_name.;eg.class Student.2 通过成员变量来表的类的属性class class_name类型 成员变量名class Studentstring m_name;int m_age;3 通过成员函数来表达行为class class_name返回类型 成员函数名(形参表)函数提;eg.class Studentstring m_name;int age;void learn(const string & lesson);将成员函数和定义分开class Studentstring m_name;int age;void Student:learn(const string & lesson);4:通过访控属性约束属性和行为的访问方式访控属性缺省的访控属性为私有private /结构体与类的唯一区别公有成员:public谁都可以访问 私有成员:private只有自己可以访问保护成员:protected只有自己和自己的子类可以访问class Studentprivate:string m_name;int age;public:void learn(const string & lesson);5 构造函数class class_name类名(形参表):初始化表函数体;该类的对象创建时,相应的构造函数被自动执行.创建对象的同时提供构造实参的表,与构造函数的形参匹配栈:开辟空间=调用构造函数初始化堆:new - 条用构造函数string类会调用缺省构造初始化为空构造函数可以重载缺省构造函数如果一个类中没有定义任何构造函数,那么系统会自动为其提供一个无参的构造函数。缺省构造函数对于基本类型的成员不做初始化,而对类类型的成员变量,通过相应类型的无参构造函数做初始化几个特殊用途的构造函数:默认初始化A无参构造函数Student : Student(void)或?Studebt : Student(const string & name = ,int age = 0)B类型转换构造函数:自定义的类型转换A:A(const B & b)A:A(B b)B b;A a = b;A a(b);void foo(A,a)foo(b)A foo(void)B b,return b;通过explicit关键字可以指明通过构造函数所完成的类型转换必须显示的进行C 拷贝构造函数:同类型对象的克隆A:A(const A & that)如果类中没定义拷贝函数系统会自动提供一个缺省的拷贝构造函数,该函数对于基本类型的成员变量,按字节复制,对于类类型的成员变量,调用相应的拷贝函数,完成复制。在大多数情况下,缺省拷贝函数是主够用的,不需要自定义拷贝函。class A/无参(缺省)、拷贝(缺省)class Apublic:/无参(自)、拷贝(缺)A(void)class AA(int a)/自(),拷贝(缺)class AA(const A & a)/就这一个初始化表初始化只和声明顺序有关A 语法使得成员变量的初值在调用构造函数的压栈时就赋值而不是在构造函数中类名:类名(构造形惨表):成员变量(初始值),.class Studentpublic:/*Student(const string & name,const int age)m_name = name;m_age = age;*/Student(const string & name,const int age):m_name(name),m_age(age)/*Student(void)m_name = 匿名;m_age = 0;*/Student(void):m_name(匿名),m_age(0)private:string m_name;int m_age;B 必须使用初始化的场合含有类类型的变量,而变量的类型没有无参构造函数含有常量或引用型成员变量const int a;a = 10int & r;r = b;?C拥有一个不带无参构造的基类.D成员变量的初始顺序仅与其在类中被声明的顺序有关,而与其在初始化列表中顺序无关class Xpublic:X(string str):m_str(str),m_len(m_str.length()int m_len;string m_str;6 把类的声明和实现分开实际开发中通常将类的声明部分放到.h中,实现放在.cpp中7 在C+中类和结构体没有本质的区别,唯一不同的是类的缺省访控属性为私有,而结构体为共有练习:实现一个CLock类,在构造函数中将Clock初始化为当前系统时间,通过成员函数在屏幕上显示电子钟16:09:26三、this指针1一般而言,关键字this 是一个指针,在普通成员函数中this指针指向调用该函数的对象,在构造函数中this指向这个正在正在被构造的对象2 应用场景 在成员函数/构造函数中明确表示所引用的变量是一个成员变量,以避免和同名的参数变量,及局部变量发生冲突/*/#include using namespace std;/#define _class_#ifdef _class_class Studentpublic:/*Student(const string & name,const int age)m_name = name;m_age = age;*/Student(const string & name,const int age):m_name(name),m_age(age)/*Student(void)m_name = 匿名;m_age = 0;*/Student(void):m_name(匿名),m_age(0)void learn(const string & lesson)cout m_age 岁的 m_name 同学 在学 lesson endl;/*/编译器对上面的函数做了如下修改 void learn(Student * this,const string & lesson)cout m_age 岁的 m_name 同学 在学 lesson endl; */void setName(const string & name)if(name = 2)cout 你才2 endl;elsem_name = name;void setAge(const int age)if(age 0)cout invalid age 0 learn(C);/* learn(ps,C); */delete ps;Student * ps1 = new Student();ps1-learn(UNIX C);delete ps1;Student student2;/Student student2();是不对的student2.learn(法轮大法);return 0 ;#endif/define _cast_#ifdef _cast_class Integerpublic:explicit Integer(int value)/explicit 必须显示的转换m_value = value;void print()cout m_value endl;Integer operator + (const Integer & i)cout m_value + i.m_value endl;int m_value;int main(void)? Integer i = static_cast(100);/其他转换风格也可以(Integer)100/Integer(100) i.print();(i + Integer(400);return 0;#endif/#define _copy_#ifdef _copy_class Dogpublic:Dog(const string & name)m_name = name;/*Dog(const Dog & that)/Dog(const Dog that)/无限递归了m_name = that.m_name;*/void talk(void)cout m_name WangWang! endl;private:string m_name;/void foo(Dog dog)void foo(Dog& dog)dog.talk();int main(void)Dog dog1(You);dog1.talk();Dog dog2(dog1);dog2.talk();foo(dog1);return 0;#endif/#define _inint_list_#ifdef _inint_list_class Integerpublic:/Integer(void)Integer(int value):m_value(value)intm_value;class Studentpublic:Integer m_age;/Student(int age)Student(int age):m_age(age)m_age = Integer(age);class Dumypublic:Dumy(int c,int & r):m_c(c),m_r(r)const int m_c;int & m_r;int main(void)Student stu(23);int a = 1000;Dumy dumy(100,a);cout dumy.m_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 想长脚的石头课件
- 2026届河北省保定市曲阳县第一高级中学高二化学第一学期期末综合测试试题含答案
- 患者管路管理
- 幼儿园课程设置方案
- 农产品营销策划方案
- 个人安全生产应急方案
- 曲线函数测试题及答案
- 叉车铲车考试题及答案
- 春晓古诗考试题及答案
- 新冠肺炎考试试题及答案
- 高级西点师习题及参考答案解析
- 2025年中学教师资格证《教育知识与能力》模拟试题-附解析
- 2025版劳务公司挂靠合作服务合同模板下载
- 肾结石合并脓毒症护理查房记录
- 《关于暂停开展企业安全生产标准化定级工作的通知》解读培训
- 理化检测员考试题及答案
- 模具数据管理办法
- 北京水务投资集团有限公司集团系统招聘考试真题2024
- 2025秋人教版八年级上册地理全册重点知识点早背晚默
- 2021-2026年中国铠装电缆行业市场全景调研及投资规划建议报告
- 糖尿病及防治课件
评论
0/150
提交评论