IT@民工 - 博客园 ustc11wj.cnblogs.com

IT@民工 - 博客园

站名: IT@民工 - 博客园

网址: http://ustc11wj.cnblogs.com

目录: 电脑网络 > IT资讯

PR:

Alexa: 652

备案号: 沪ICP备09004260号

服务器IP: 42.121.252.58   浙江省杭州市 阿里云服务器

描述: IT@民工 - 博客园

查询: [ 网站综合查询 | PR查询 | Alexa排名 | 同IP网站 ]

详细介绍

IT@民工~~~程序是门艺术,我却在艺术之门之外。~~~【路漫漫其修远兮,我将上下而求索。】随笔 - 102, 文章 - 0, 评论 - 1, 引用 - 02012年8月13日C++虚继承分析及对象模型其中CBase称之为CSubClass的虚基类,而不是说CBase就是个虚基类,因为CBase还可以不不是虚继承体系中的基类。public SubBase2public SubBase2posted @ 2012-08-13 22:39 IT@民工 阅读(131) 评论(0) 编辑2012年8月12日未初始化的变量的值 0Xcccccccc -858993460 烫指针:0xCCCCCCCCVC的DEBUG版会把未初始化的指针自动初始化为0xCCCCCCCC,而不是就让它随机去,那是因为DEBUG版的目的是为了方便我们调试程序的,如果野指针的初值不确定,那么每次调试同一个程序就可能出现不一样的结果,比如这次程序崩掉,下次正常运行,再一次虽然没崩掉,但结果不对……那显然对我们解bug是非常不利的。DEBUG版本为了能让程序员更早的发现错误,把堆栈上的数据对初始化成了0xcc,也就是说局部变量如果不初始化,那么DEBUG版本中就会是0xCCDebug为了调试方便,也就是其Edit And Continue特性,为每个函数都多分配了64个字节。当用户在调试时在代码里增加少量变量的时候,编译器就可以分配那64个字节的空间过去,这样就不用重新编译程序来重新调试。int:-858993460(十六进制OXCCCCCCCC)(二进制11001100110011001100110011001100)a、当一个未初始化赋值的时候(至少是vc 下未初始化的内存)默认是0xCCCCCCCC;,他在内存就默认保存为-858993460 即二进制的11001100 11001100 11001100 11001100; 十六进制的CCCCCCCC;而汉字 "烫" 的编码恰好就是1100110011001100:b、如果变量的数据类型由于你的运算的溢出了,在内存中系统就自动改为-858993460unsigned,unsigned long:3435973836 (OXCCCCCCCC)(11001100110011001100110011001100)short: -13108 (0XCCCC)(1100110011001100)char: -52 '?' 其中 -52为(0XCC)(11001100)double,long double: -9.2559631349317831e+061 bool:trueposted @ 2012-08-12 11:11 IT@民工 阅读(403) 评论(0) 编辑2012年8月11日C++虚函数表解析7.10 + Linux 2.6.22 + GCC 4.1.3下,这个值是如果1,表示还有下一个虚函数表,如果值是0,表示是最后一个虚函数表。pFun=(Fun)*((int*)*(int*)(&d)+3);一般继承(有虚函数覆盖)cout<<"子类自己第一个虚函数地址: "<<(int*)((int*)*(int*)(&d)+0)<<endl;多重继承(无虚函数覆盖)多重继承(有虚函数覆盖)posted @ 2012-08-11 18:54 IT@民工 阅读(21) 评论(0) 编辑Effective C++条款 37:绝不重新定义继承而来的缺省参数值"StdAfx.h"<iostream>void draw(ShapeColor color = Red) const = 0;publicShape {void draw(ShapeColor color = Green) constpublicShape {void draw(ShapeColor color) const函数系动态绑定而来,意思是调用一个virtual函数时,究竟调用哪一份函数实现代码,取决于发出调用的那个对象的动态类型:class 为他所指定的缺省参数值:class而非Rectangle class!public: enum {Red, Green, Blue}; virtual void draw(ShapeColor color = Red) const = 0;};public: virtual void draw(ShapeColor color = Red) const;};classes也必须改变,否则它们最终导致“重复定义一个继承而来的缺省参数值”。virtual函数,后者可被derived classes重新定义。这里我们可以让non-virtual函数指定缺省参数,而privatevirtual函数负责真正的工作:public:
enum {Red, Green, Blue};
void draw(ShapeColor color = Red) const
{
doDraw(color);
}
private:
virtual void doDraw(ShapeColor color)const = 0;
};
public:
private:
virtual void doDraw(ShapeColor color) const;//不需指定缺省参数
};
posted @ 2012-08-11 15:59 IT@民工 阅读(25) 评论(0) 编辑
C++ using关键字作用总结
声明引入基类成员名称(参见C++ primer)
public:
std::size_t size() const {
return n; }
protected:
std::size_t n;
};
class Derived :
private Base { . . . };
在 Base 中为 public,但在 Derived
中为 private。为了使 size
在 Derived
中成为 public,可以在 Derived
的 public
部分增加一个 using
声明。如下这样改变 Derived
的定义,可以使 size 成员能够被用户访问,并使 n
能够被 Derived的派生类访问:
private Base {
public:
using Base::size;
protected:
using Base::n;
// ...
};
个或多个版本,但是通过派生类型只能访问派生类中重定义的那些版本,所以如果派生类想通过自身类型使用所有的重载版本,则派生类必须要么重定义所有重载版本,要么一个也不重定义。有时类需要仅仅重定义一个重载集中某些版本的行为,并且想要继

猜你喜欢