随笔分类 - c++
摘要:为了解决多继承下的二义性而设计的vitrul继承class Base{public: Base(void); ~Base(void);};Base::Base(void){ printf("Base::Base():%p\n",this);}class ChildFirst : ...
阅读全文
摘要:比如。我们想实现一个Set类,而已经有一个List类可提供给你使用,我们到底用is-a(public继承)关系还是用has-a(组合)关系呢?1:如果使用is-a关系,则class Set:public List{。。。。};在处理插入的时候,List的insert方法不能满足我们的需要,因为它可以...
阅读全文
摘要:切勿重新定义继承来的带缺省参数的函数。我们知道,继承来的函数是virtual 的,至于原因在上一节中已经说明了,即“切勿重新定义父类non-virtual函数”。所以确切的描述应该是“切勿重新定义继承来的带缺省参数的virtual函数”。因为缺省参数是静态绑定,而virtual是动态绑定。typed...
阅读全文
摘要:子类如果重新定义了父类的non-virtual函数则不会有多态效果。为方便描述,这里的方法和继承方式都用public。至于原因嘛,你懂的!1:子类直接继承父类方法class BaseOption{public: void Function();};void BaseOption::Functi...
阅读全文
摘要:1:访问控制1.1 public 这类型成员可以被类本身函数访问,也可以被外部创建的类对象调用。子类对象与子类内部可以访问1.2 protected类型成员,只能被类本身函数访问。外部创建的类对象没有访问权限。子类对象没有访问权限,子类内部可以访问1.3 private类型成员,只能被类本身函数访问...
阅读全文
摘要:C++函数模版与类模版。template void SwapFunction(T &first, T &second){}//函数模版template //类模版class CTemplate{public: void SWap(T &first, T &second){ }};#include...
阅读全文
摘要:拷贝构造函数要求把所有变量都需要做拷贝。在有继承关系情况先,子类的拷贝构造函数,需要调用父类拷贝构造函数。示例代码如下:class Base{public: virtual ~Base(); Base(const char *pStr); Base(const Base &othe...
阅读全文
摘要:在实现多态时候,基类的析构函数应该写成virtual。在用基类申明实例化的子类对象,在delete时候,如果基类不是virtual的析构函数则不能调用进子类的析构函数class Base{public: Base(); virtual ~Base();public: char *m...
阅读全文
摘要:如果你一看见C++中const就脱口而出:“常量!”那只能说明你对c++不甚了解。或者说你太2了.const得一些使用方法与场景如下:1:const修饰普通变量,全局变量,静态变量1 const int iTmp = 1;2 int const iTmpEx = 2;变量保持其原有属性,只是多了一个...
阅读全文
摘要:一、作用域变量的几种作用域:全局作用域,文件作用域,命名空间作用域,类作用域,局部作用域,语句作用域。二、C++内存的区内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。二、比较(不讨论类作用域静态变量,只说全局)1.存储区全局变量、静态局部变量、静态全局变量都在 静态存储区分配空间。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。2. 作用域(1)全局变量全局变量具有全局作用域文件作用域(文件中的全局)。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。(2)静态全局
阅读全文
摘要:在讨论全局变量之前我们先要明白几个基本的概念:1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux或者嵌 入式下做开发工作的话,那么你可能非常的理解编译与连接的区别!当在VC这样的开发工具上编写完代码,点击编译按钮准备生成exe文件时,VC其实做了两 步工作,第一步,将每个.cpp(.c)和相应.h文件编译成obj文件;第二步,将工程中所有的obj文件进
阅读全文
摘要:抽象类(abstract class)和接口(interface)的概念是面向对象设计中常用的概念, 也是比较容易混淆的概念. 在这里, 我提出一种区分它们的思路:1. 如果一个类B在语法上继承(extend)了类A, 那么在语义上类B是一个类A.2. 如果一个类B在语法上实现了(implement)接口I, 那么类B遵从接口I制定的协议.------------------------------------------------------------------------------------------------使用abstract class的根本原因在于, 人们希望通过这样
阅读全文
摘要:网上看到的关于C++函数的重载、覆盖和隐藏区别的回答,如下(其内容来源于C++面试宝典中一道题目):a.成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。b.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。(2)
阅读全文
浙公网安备 33010602011771号