
c++
活在阳光下
这个作者很懒,什么都没留下…
展开
-
C++中的explicit关键字
在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很少能用的上。再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决。但稍微留心一下就会发现现有的MFC库或者C++标准库中的相关类声明中explicit出现的频率是很高的。了解explicit关键字的功能及其使用对于我们阅读使用库是很有帮助的,而且在编写自己的代码时也可以尝试使用。既然C++语言提供这种特性转载 2014-10-22 17:30:03 · 474 阅读 · 0 评论 -
C++移位运算符
关于逻辑移位、算术移位可参见迅雷深大笔试题部分。的一道题。以前看到C++标准上说,移位运算符(>)出界时的行为并不确定:The behavior is undefined if the right operand is negative, orgreater than or equal to the length in bits of the promoted left operand.原创 2016-12-31 16:08:17 · 605 阅读 · 0 评论 -
C++ 虚函数表解析
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使转载 2016-12-31 16:06:00 · 254 阅读 · 0 评论 -
int和unsigned int 相互转化的问题
先看下面这段代码:#include void main(){ unsigned int a=6; int b=-20; if((a+b)>6) printf(">6"); else printf("<=6");}乍看认为结果是6,这是因为a+b做了隐式的转换,把int转换为unsigned int. 编译器就会把b当做一个很大的正数!!!原创 2017-01-03 17:24:42 · 1600 阅读 · 0 评论 -
绝不重新定义继承而来的non-virtual函数
假设我告诉你,class D是由class B以public形式派生而来的,class B定义有一个public成员函数mf。由于mf的参数和返回值都不重要,所以我认为它们是void。看下面的代码:// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"class B{public: void mf();原创 2016-07-05 10:26:44 · 48983 阅读 · 0 评论 -
区分接口继承和实现继承
表面上的public继承概念,其实经过严密的严查之后,会发现它由两部分组成:函数接口继承和函数实现继承。这两种继承的差异,其实就是函数声明与函数定义之间的差异。作为class的设计者,有时候你会希望derived class只继承成员函数的接口(也就是声明);有时候你又希望derived class同时继承函数的接口和实现,但又希望能够覆写(override)他们所继承的实现;又有时候你希望d原创 2016-07-04 18:25:13 · 2360 阅读 · 0 评论 -
避免遮掩继承而来的名称
我们知道,当位于一个derived class成员函数内指涉(refer to)base class内的某物(也许是个成员函数、typedef、或是成员变量)时,编译器可以找出我们所指的东西,因为derived class继承了声明与base class内的所有东西。但是让我们看下面一段代码:// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#in原创 2016-07-04 17:27:05 · 453 阅读 · 0 评论 -
const的用法
char greeting[]="Hello"; char* p=greeting; const char* p=greeting; //non-const pointer,const data char* const p=greeting; //const pointer,non-const data const char* const p=greeting;//cons原创 2016-04-15 22:20:54 · 356 阅读 · 0 评论 -
用inline替换#define的好处
代码中可以用#define来进行类似函数之类的操作;比如可以比较两个数字的大小:#define CALL_WITH_MAX(a,b) f((a)>(b)?(a):(b))这样宏在代码中并不少见,但是这样的宏带来的弊端也是非常明显的,有些情况添加括号可以解决某些问题,但是有些问题,是这类形式带来的,括号是避免不了的,比如说下面的例子:int a=5,b=0;CALL_WITH_MAX(原创 2016-04-14 20:00:50 · 1824 阅读 · 2 评论 -
C++继承方式
公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。1. 公有继承(public)公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。2. 私有继承(private)私有继承的特点是基类的公有成员和保护成员都作为派生类的私有转载 2016-03-16 10:24:11 · 331 阅读 · 0 评论 -
继承关系
1.访问控制和继承在基类中,public和private标号具有普通含义:用户代码可以访问类的public成员而不能访问private成员,private成员只能由基类成员方法和友元方法访问。派生类也没有什么特殊的,和用户代码具有一样的权限:它可以访问public成员但是不可以访问private成员。还有一种叫做protected成员,它希望允许派生类访问,但是禁止其他用户访问这些成员。p原创 2015-11-01 19:53:57 · 636 阅读 · 0 评论 -
C++继承、公有,私有,保护
公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。1. 公有继承(public)公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。2. 私有继承(private)私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被转载 2016-12-31 16:09:48 · 237 阅读 · 0 评论