基类指针指向一个派生类对象-read.ppt

  1. 1、本文档共59页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基类指针指向一个派生类对象-read

二. C/C++ 预备知识 变量的存储类型 函数参数的传递 封装 类及其成员 继承 基类与派生类 派生类对象访问基类成员 一致性难题 多态 虚函数 一致性与功能 虚函数实现机制 object slice 多重继承 多重继承的虚表 二义性 RTTI 1 变量的存储类型 全局变量:在任何函数之外定义,可以被任何代码所访问.在其他的文件中使用这些变量时,使用extern来声明之,使得编译器了解这些变量的类型和名字,但是不重新分配内存. Static全局变量:只在文件范围内可见. (使得开发者可以任意地使用变量名字,不必担心重名.) 自动变量:函数体内部.在stack中 Static局部变量: 在函数体内部定义,编译器为之生成永久存储单元,在调用之前就存在.只在函数内部可见. 动态分配变量: new delete 在heap中. 类的static成员变量:只与类有关.属于类而不属于对象的变量.(静态成员函数,没有this指针,其中只能访问静态成员变量.) 以下例子见virtualfun工程 2 函数参数的传递 引用运算符&用来定义一个引用. int num; int &refn=num; refn是num的别名.此语句并没有在内存中创建一个新的变量refn,它只不过通知编译器num有了一个新的名字叫refn. Refn和num是同一个变量. 1.传值 void swap1(int x,int y) { int temp; temp=x; x=y; y=temp;}; C++中缺省的参数初始化方法是把实参的值拷贝到参数的存储区中. 形参的值可以改变, 但此函数并不能改变实参的值. 2 void swap2(int *px,int *py) { int temp; temp=*px; *px=*py; *py=temp; }; 同上,函数不能改变实参的值(即地址值),在这种意义下, 传地址和传值是等价的. 虽然不能改变实参的的值,但是改变了实参(即地址)所存储的值. 如果要改变一个指针的值,那么就要使用双重指针. 3 void swap3(int &x,int &y) { int temp; temp=x; x=y; y=temp; } 与前两个不同,形参是实参的别名.实参形参是同一个变量. 调用方法: 1.int a=2, b=5; swap1(a,b); cout<<a<<b; //2 5 2. int a=2,b=5; swap2(&a,&b); cout<<a<<b; //5 2 3.int a=2;b=5; swap3(a,b); cout<<a<<b; //5 2 若希望通过一个函数改变一个指针,那么可以使用指针的引用或者更常用地使用双重指针作为函数的参数. 3 封装 类及其成员 类。mobile telephone 手机 class mt { private: int price; public: void work(); void setprice(int initp) {price=inip;}; void getprice(int *oldp) { *oldp=price;}; //数据成员是私有的,客户只能通过公有的方法,在方法内部来访问。 mt(void); ~mt(void); }; C++编译器对于数据成员和函数成员的处理: 数据成员: 静态的: 定义了类,就会给静态数据分配内存. 非静态的: new了实例,每个实例都为之分配. 函数成员: 定义了类,实现了该函数后,就有该函数的入口指针.对于新new的实例并不产生新的指针.都是使用同一个函数. 因此存在者重入性和并发性的安全问题,如果函数体里使用了静态的变量(函数级的)的话. 如果是非静态的成员函数,则每一个实例调用它时,会传入一个指向实例本身的指针 this.实例借此可以访问其他的成员(变量或函数) 如果是静态的成员函数,则在调用时无this指针,因此不能访问类的数据成员. 如果是虚函数,则会为此类建立一个虚表,每个表项是一个指针,指向此函数的实现.这是额外的开销.见后文. 4 继承 基类与派生类 4.1 派生类对象访问基类成员 共有的性质提升到基类中。 class EE //电子设备 { protected: int price; //保护的数据成员可以被派生类的成员函数访问 public: void Work(); void SetPrice(int in

您可能关注的文档

文档评论(0)

wangyueyue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档