c/c++知识点
bian_qing_quan11
这个作者很懒,什么都没留下…
展开
-
c++中析构函数为什么可以为虚函数?
与上一篇文章相对应,这一篇文章我们来说下“为什么析构函数中可以为虚函数?”在派生体系中,我们同长情况下会将顶层基类的析构函数定义为虚函数。这样做的目的是:当我们将派生类指针转换为基类指针时,如果基类中析构函数不是虚函数,当我们删除该指针时不能够释放派生类的资源。例子如下:(1)#includeusing namespace std;class base{public: bas原创 2017-05-22 19:58:59 · 550 阅读 · 0 评论 -
c中restrict关键字
最近在学习《Unix 环境高级编程》这本书,在学习过程中看到了一个关键字restrict关键字。这个关键字之前遇到过,但是不知道是什么含义。今天在这里对他进行学习,并做此记录。1、restrict关键字用法:restrict只能用于限定一个指针如,int *restrict ptr = 10;2、restrict关键字能能:某个指针使用restrict限定定后,它告诉编译器只能用过该指针来原创 2017-05-21 12:31:15 · 558 阅读 · 0 评论 -
c++构造函数之谜
写这篇博客之前,我一直都觉得c++中的构造函数是个比较简单的东西,另外也是我之前学习构造函数这一点的深度还不够。通过最近的学习我认识到了自己关于构造函数的几个误解,另外也希望看到这篇博客的人少走弯路。之前的关于构造函数的误解:(1)如果一个类内没有显示定义构造函数,那么编译器会为类自动合成默认的构造函数;(2)合成的默认构造函数会初始化类内的所有成员;这两个误解可以用下面一原创 2017-04-27 19:29:29 · 417 阅读 · 0 评论 -
c++11中四种类型转换
1、 static_cast:功能:完成编译器认可的隐式类型转换。格式type1 a;type2 b = staic_cast(a);将type1的类型转化为type2的类型;使用范围:(1)基本数据类型之间的转换,如int->double;int a = 6;double b = static_cast(a);(2)派生体系中向上转型:将派生类指针或引用转化为基原创 2017-04-26 10:44:00 · 12021 阅读 · 3 评论 -
void *类型知识点
1、void *类型的指针可以指向任意类型的对象。2、对于一个void *的变量p(void *p),它给我们的信息仅仅是p是一个指针变量,并不会给我们说明p指向的对象的类型,当然我们也不能使用p进行任何操作,比如*,+,-,/....。原因很简单,因为我们就只知道他是一个指针,并不知道该指针指向的对象的类型是什么,因此该指针上并没有任何操作。以下对void *的错误操作:*p; ++p;原创 2017-04-24 11:19:02 · 411 阅读 · 0 评论 -
C++构造函数中初始化成员的先后顺序
给定一个类,我们都知道,类的构造函数是用来初始化类中的成员的。那么类中成员变量初始化的先后顺序是依据什么确定的呢?看下面一段程序:#includeusing namespace std;class A{ int a; int b;public: A() :b(0), a(b + 2){ } void print() { cout << "a = " << a << "原创 2017-05-23 17:59:00 · 1343 阅读 · 0 评论 -
c++中构造函数不能为虚函数的原因
上周六(也就是大前天)参加了中兴的模拟招聘,我面试的c++研发。面试期间面试官问了我一些问题,其中一些印象深刻的我再次做下笔记。“构造函数能不能为虚函数?”这个问题因为之前我刷题的时候遇到过,我脱口而出“不能”。当时回答完不能后,我自己就在想“为什么不能呢?”虽然当时面试官没有接着问“为什么不能?”。我心里有点侥幸,但是为什么不能我还真不知道,回来我又查了相关的资料,在这里做下记录。q原创 2017-05-22 17:29:04 · 393 阅读 · 0 评论 -
c++中类中成员在内存中的布局
本篇博客来分析C++中类成员的内存布局情况。首先我们来分析下成员函数的内存布局,然后分析下类中成员变量的内存布局。1. 类中成员函数布局c++类中的成员函数包括有虚函数和普通成员函数。首先我们先来讨论下没有虚函数的类中成员函数是如何布局的。(1)只含有普通成员函数的类一个类也相当于一个作用域。对于不含虚函数的类而言,成员函数可以被看作是类作用域的全局函数,不在对象分配的空间里。也就原创 2017-06-10 13:33:52 · 993 阅读 · 0 评论 -
二叉树的各种遍历
//-----二叉树struct treeNode{ int data; struct treeNode*left; struct treeNode *right;};void createTree(treeNode *&root){ treeNode *t = (treeNode *)malloc(sizeof(treeNode)); t->left = NULL; t->r...原创 2018-03-08 15:32:08 · 417 阅读 · 0 评论