参考:http://blog.csdn.net/zhanxinhang/article/details/6786269
前言:c++面向对象中的繁琐机制,不得不让你在编程中频频“犯病”,找错误,找bug,困扰,是你的病源所在,本人虽不是什么“良医”, 却也算是总结出以下“良方”。注:难免会有记忆上的遗漏,知识上的不够,遗漏之处还需大家来补充啊!http://blog.csdn.net/zhanxinhang
药方1 ☞ 必需时刻明白面向对象编程中要扮演的两个角色,一个就是你,类的设计者,一个就是用户,类的使用者,你的设计是针对用户而言的,当然你也可能是身兼两职,同时是设计者又是用户。
药方2 ☞ 设计一个类时,将声明放于头文件,定义放在cpp文件中,因为类是给用户使用的,将声明放在头文件中,用户便可以方便使用,而定义在cpp文件中主要是为了两点,一提高编译效率,二避免用户包含文件后发生重定义。
药方3 ☞ 声明完一个类后必须以分号结束,因为声明完一个类后后面还可以加一个对象名,用来声明该类的实例化对象,分号‘;’ 不是表示声明的结束,而是表示声明该类对象的结束,如果单纯一个分号表示没有声明任一对象。
药方4 ☞ 避免在构造函数里实例化本类,否则会发生递归死循环。
药方5 ☞ 避免在析构函数里delete本类实例,否则会发生递归死循环。
药方6 ☞ inline成员函数必须在头文件里定义,因为inline函数本质是内联展开的,跟#define预编译类似。
药方7 ☞ hpp头文件里的类或函数必须在hpp头文件里定义,因为hpp的本质是让编译器只对hpp文件里的内容编译一次,然后将目标代码附到cpp目标文件中。
药方8 ☞ hpp头文件里的全局变量必须声明为static 否则会发生重编译,static本质是让编译器只定义一次。
药方9 ☞ const 数据成员必须要在初始化列表中赋初值(c++11中也可以直接=号赋值),因为它是const变量。
药方10☞ const成员函数不允许你修改类的数据成员。因为它就是不予许。
药方11☞ 指向const对象的指针访问成员函数时,只能访问const成员函数,因为指向const对象的指针不予许你修改它所指向的内存的值,而const成员函数不修改类对象数据内存的值,它们俩正好互相吻合。
药方12☞ static数据成员需要在类外定义,它本质上并非属于包含它的类。
药方13☞ static成员函数不包含this指针,因为它本质上并非属于本对象,而属于本类。
药方14☞ 如果类中的某一指针数据成员指向分配的内存空间,则一般的做法是定义析构函数,在析构函数里释放它所指的内存空间。因为类的生命周期结束时,如果没有定义析构函数,则会调用编辑器合成的析构函数,而该合成的析构函数不会智能地释放数据成员指针所指向的内存,所以必须在类结束之前释放它指向的内存。还有另一种做法就是将该成员指针定义为智能指针类型。
药方15☞ 操作符重载最好不要重载两个内置类型的对象,重载的类型至少要有一个为类类型或枚举类型。因为重载两个内置类型的对象完全没有必要。
药方16☞ 赋值操作符重载(operator=),不宜设为虚函数,因为赋值操作符中的指针或引用函数参数有可能是指向基类对象也有可能是指向派生类对象,因此容易发生混淆。
药方17☞ 在继承层次中,基类应该定义一个虚析构函数,因为非虚析构函数不会被继承,而虚析构函数会在派生类定义析构函数时发生重定义(就是虚表指针指向了派生类的析构函数)。在利用基类指针实现多态时,基类指针指向了新开辟(new)的派生类对象,这时由于基类的析构函数是虚的,所以再利用基类指针释放(delete)掉派生类对象内存时,就可以顺利地执行派生类的析构函数了。
药方18☞ 模板类或函数,在头文件中声明,并且,定义也要在此头文件中(一般采用hpp头文件),因为模板特化机制实际上是编译时利用模板参数产生可以兼容实例的目标代码附于使用它的cpp文件中(特化),从而实现多态,而不能预先产生目标代码就兼容实例的。
药方19☞ 声明友元之前必须对该声明友元的对象,进行声明或定义。因为你让我跟他交朋友,可以,但你必需让我知道他的为人吧。^_^
药方20☞ 你所知的只是沧海一粟,切莫过于骄傲和自满。
结语:良药苦口!...
分享到:
相关推荐
《C++面向对象编程实例大全》是一本专为初级学习者设计的教程,旨在通过丰富的实例深入浅出地讲解C++的面向对象编程概念。面向对象编程(Object-Oriented Programming,简称OOP)是C++的核心特性,也是现代软件开发...
《Visual C++ 面向对象编程教程——王育坚》是一本专为学习MFC(Microsoft Foundation Classes)和面向对象编程技术而设计的教学资料。该教程以幻灯片的形式呈现,结合实例与详细的讲解,使得学习过程更为直观且易于...
C++是一种强大的编程语言,以其丰富的特性,尤其是面向对象编程(OOP)而闻名。面向对象编程是一种设计和实现软件的方式,它将现实世界中的实体抽象为类,然后通过对象来表示这些实体。C++的面向对象编程主要包括三...
《Visual C++面向对象编程教程 王育坚》第二版是深入学习C++编程的一本经典教材,尤其强调面向对象编程的理论与实践。王育坚教授以其丰富的教学经验,将复杂的C++语言概念与实际应用相结合,帮助读者更好地理解和...
《C++面向对象高效编程》是一本深入探讨C++编程技术的著作,由Kayshav Dattatri撰写,中文版的PDF格式使得国内读者能够更好地理解其内容。这本书主要聚焦于利用C++的面向对象特性进行高效编程,是C++程序员提升技能...
C++面向对象高效编程.part1 C++面向对象高效编程.part1 C++面向对象高效编程.part1
Visual C++面向对象编程教程 课后题 4-32
c++编程 C++面向对象多线程编程 c++标准程序库
c++高级编程 C++面向对象多线程编程 c++标准程序库.pdf
第2章“C++基础”回顾了C++的基础语法,如变量、数据类型、控制结构、函数等,这些都是学习面向对象编程的必备前提。理解这些基本元素对于后续章节的学习至关重要。 第3章和第4章“类和对象1”及“类和对象2”详细...
《C++面向对象程序设计》是C++编程领域的一本经典教材,由清华大学出版社出版,龚晓庆、付丽娜等多位专家共同编著。这本书深入浅出地讲解了C++语言的核心概念,特别是面向对象编程(OOP)的思想和技术。第二版在第一...
C++是一种强大的、通用的编程语言,以其支持面向对象编程(OOP)而闻名。面向对象编程是一种设计和实现软件的方式,它强调将现实世界的问题和解决方案映射到计算机程序中的对象。本资料包“C++面向对象程序设计 经典...
本书《面向对象编程:C++与Java比较教程》详细比较和对比了当今最流行的两种编程语言C++和Java,旨在教授互联网时代至关重要的技能和面向对象编程技术。作者Avinash C. Kak凭借其成功教授的课程,撰写了一本全面的...
来看看我们的C++面向对象编程类库吧。使用它,你可以用Visual C++调用类似于C#的类库。该类库模仿了C#语言的System类。资源内有头文件和示例项目。不要再纠结了 C++就是这么简单~~现在就下载我们的类库吧!!
c++面向对象高效编程,kayshav dattatri 著,萧湘工作室译,非常不错的一本书,pdf格式。分两部分。
C++是一种强大的、通用的编程语言,以其支持面向对象编程(OOP)而闻名。面向对象编程是一种编程范式,它以对象为中心,强调数据和操作数据的方法的封装。本资料集是关于“C++面向对象程序设计”的课后习题答案,...
本项目是基于C++的面向对象程序设计实现,旨在教授学生如何运用面向对象编程思想来构建实际的应用程序。** **一、面向对象编程基础** 面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,其核心思想...
这是Visual C++ 面向对象编程教程,里面章节的内容有 第1章 Visual C++集成开发环境,第2章 C++语言基础,第3章 C++面向对象程序设计,第4章 创建应用程序框架,第5章 文档与视图,第6章 MFC原理与方法,第7章 ...
本书以帮助读者掌握C++面向对象高效编程方法为目的,详细介绍了C++编程中的各种概念和应用技巧。全书共分为两部分,第一部分介绍面向对象编程的基础和应用,如数据抽象、继承、异常处理等内容;第二部分说明了如何...
总的来说,C++和Java在面向对象编程上有许多共同点,但各自的侧重点不同。C++更适合需要底层控制和高效性能的场景,而Java则在跨平台应用和企业级开发中占据主导地位。本教程的中英文完整版将详细阐述这些差异,帮助...