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

C++程序设计经验杂谈 李长河 changhe.lw@ Linux系统下编译运行C++程序 step1:如果windows操作系统,可安装虚拟机 VirtualBox / step2:下载并在virtualBox下面安装Ubuntu系统: /global step3: 启动Ubuntu 系统,打开gedit编辑器,编写C++程序 step4:安装GNU c++编译器(build-essential) step5 打开terminal终端,编译源程序 g++ -o main main.cpp step6: 运行程序 ./main 条款1:从主函数参数传递,避免更改代码 文件读入,每次运行处理一个文件 //main.cpp ... int main(int argc, char *argv[]){ string file=test1.txt; ifstream in(file.c_str()); .... return 0; } main.exe test1.txt main.exe test2.txt string file=test2.txt; int main(int argc, char *argv[]){ ifstream in(argv[1]); .... return 0; } 条款2. 为具有动态内存分配的类重新定义/重载复制构造函数和赋值运算符 b = a; 问题1: 对象b中的指针data所指的内存空间丢失,且永不能释放 问题2:对象a中指针data所指内存可能重复释放或者使用一个不存在的内存 规则3:显式禁止默认成员函数的调用 实现一个数组类模板模拟C风格的数组操作,数组的赋值是禁止的 double values1[10]; double values2[10]; values1 = values2; // error! templateclass T class Array { private: Array operator=(const Array rhs); // 只声明,不要定义该函数 public: Array operator=(const Array rhs)=delete; //C++11 }; Arraydouble a1(10),a2(10); a1=a2; //error 规则4:不要重新定义基类非virtual成员函数 D x; // x is an object of type D B *pB = x; // get pointer to x pB-mf(); // call mf through pointer D *pD = x; // get pointer to x pD-mf(); // call mf through pointer 然而, pB-mf(); // calls B::mf pD-mf(); // calls D::mf 原则: 1. 所有作用于基类的操作都适用于它的派生类 2. 派生类会继承所有基类非虚函数的接口(iterface)和实现(implementation) class B { public: void mf(); ... }; class D: public B { ... }; class D: public B { public: void mf(); // hides B::mf; ... }; 条款5.理解你自己想要做的 1. 一个公共基类意味着所有的派生类都会继承其数据和函数成员 class B{}; class D1: public B{}; class D2:private B{}; 2.公有继承意味着派生类对象是基类对象,和基类关系:IS-A class Person{}; class Student: public Person{}; 3. 私有继承意味着派生类根据基类创建,和基类关系 implemented-in-terms-of class B{}; class D:private B{}; D d; B b(d); //error, 说明派生类对象d不是基类类型 只是简单的代码重用,没有任

文档评论(0)

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

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

1亿VIP精品文档

相关文档