![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 85
qihaixiang
这个作者很懒,什么都没留下…
展开
-
c++类实例在内存中的分配
c++是一种面向对象的编程语言,它向下保持了对c的兼容,同时也允许程序员能够自由的操控内存,虽然会带来一些问题,但这不是我们要探讨的问题,略过不表。类是对某种对象的定义,包含变量和方法,也可以理解为现实生活中一类具有共同特征的事务的抽象,他是面向对象语言的基础。所以类是不占有内存的,可是如果类生成实例那么将会在内存中分配一块内存来存储这个类。 类的实例在内存中是如何分配内存的,有什么转载 2015-03-29 12:21:36 · 794 阅读 · 0 评论 -
C++类内存分布
书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来: 先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到转载 2015-08-31 16:03:25 · 266 阅读 · 0 评论 -
虚表(C++)virtual table
C++ 中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技 术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚 函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里转载 2015-08-07 15:35:10 · 506 阅读 · 0 评论 -
int *a[10]与int (*a)[10]的区别,
int *a[10]; 定义了一个指针数组,即10个int * 类型的指针。int (*a)[10]; 定义了一个指向行的指针变量,注意是”一个”指针变量,而上面的指针数组是”10个”指针变量。指向行的指针变量可以用来指向二位数组int x[N][10],a指向x即:a x 或者 x[0] 或者 &x[0][0]a+1 x[1] 或者 &x[1][0]a+2 x[2] 或转载 2015-04-12 11:12:01 · 848 阅读 · 0 评论 -
int * * a[10] int * (*a)[10]和 int(*a[10])() 是什么意思
int* (*a)[10];a是一个指向包含10个int型指针元素的数组。比如:#include int main(){ // 定义数组,包含10个int* int* b[10]; for(int i = 0; i b[i] = new int(i+1); int* (*a)[10] = &b; /转载 2015-04-12 11:23:45 · 586 阅读 · 0 评论 -
关于 (&a+1) 的困惑
请先看以下程序: Q:若 int a[5];则 &a+1 的含义是甚么? A:&a+1 不是表示a的地址(设为Ox0010)加1,变为0x0011. 由于a为包括5个int类型的数组,则"&a+1"中的"+1"表示为相当于"1"个a大小的空间(或成为偏移),此时&a+1 表示 a[5]. Q:若 int* ptr =转载 2015-04-12 11:32:55 · 317 阅读 · 0 评论 -
虚函数表
虚函数表(Virtual Table,V-Table):使用 V-Table 实现 C++ 的多态。在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其真实反应实际的函数。这样,在有虚函数的类的实例中分配了指向这个表的指针的内存,所以,当用父类的指针来操作一个子类的时候,这张虚函数表就显得尤为重要了,它就像一个地图一样,指明了实际所应该调用的函数。编译器应该保证虚函数转载 2015-04-11 17:07:28 · 650 阅读 · 0 评论 -
不能被声明为虚函数的C++函数
常见的不不能声明为虚函数的有:普通函数(非成员函数);静态成员函数;内联成员函数;构造函数;友元函数。 1、为什么C++不支持普通函数为虚函数? 普通函数(非成员函数)只能被overload,不能被override,声明为虚函数也没有什么意思,因此编译器会在编译时邦定函数。 2、为什么C++不支持构造函数为虚函数? 这个原因很简单,主要是从语义上考虑,所以不转载 2015-04-11 16:45:29 · 272 阅读 · 0 评论 -
为什么构造函数不能声明为虚函数,析构函数可以
构造函数不能声明为虚函数,析构函数可以声明为虚函数,而且有时是必须声明为虚函数。不建议在构造函数和析构函数里面调用虚函数。构造函数不能声明为虚函数的原因是:1 构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的。而在构造一个对象时,由于对象还未构造成功。编译器无法知道对象 的实际类型,是该类本身,还是该类的一个派生类,或是更深层次的派生类。无法确定。。。2 虚函数转载 2015-04-11 16:23:44 · 277 阅读 · 0 评论 -
C++中的const与指针
在c/c++中,指针本身就是一个难点,再加与const的结合,常会产生许多让人费解的地方,在这里做个小结。 1.定义const对象const int buffsize=512;因为常量定义后就不能修改,所以定义时必须初始化.const i,j=0; //error,i没有初始化2.const对象默认为文件的局部变量//file1.ccextern const i转载 2015-03-12 18:52:02 · 242 阅读 · 0 评论 -
const在c/c++中的区别
C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中.所以,以下代码:#include using namespace std;int main(){ const int a = 1; const int b = 2; int array[ a + b ] = {0}; f转载 2015-03-13 13:58:28 · 235 阅读 · 0 评论 -
C++类的内存分配
一. c++的内存分配:http://blog.sina.com.cn/s/blog_3cba7ec10100hh6p.html1、高位地址:栈(存放着局部变量和函数参数等数据),向下生长 (可读可写可执行) 2、 堆(给动态分配内存时使用),向上生长 (可读可写可执行) 3、转载 2015-08-31 16:07:11 · 313 阅读 · 0 评论