类、结构体
文章平均质量分 67
smilesundream
这个作者很懒,什么都没留下…
展开
-
含有虚函数的空类的内存大小
01 #include 02 using namespace std; 03 04 class Base1{ 05 virtual void fun1(){} 06 virtual void fun11(){} 07 public: 08 virtual ~Base1(); 09 }; 10 11原创 2017-07-11 23:00:01 · 551 阅读 · 0 评论 -
类静态数据成员定义
转载自:http://blog.csdn.net/u011499425/article/details/52751636我们知道C++类的静态成员变量是需要初始化的,但为什么要初始化呢。其实这句话“静态成员变量是需要初始化的”是有一定问题的,应该说“静态成员变量需要定义”才是准确的,而不是初始化。两者的区别在于:初始化是赋一个初始值,而定义是分配内存。静态成员变量在类中仅仅是声明,没有原创 2017-09-11 09:13:52 · 4698 阅读 · 0 评论 -
虚继承内存布局(2019.10.22)
转载自:http://blog.csdn.net/xsh_123321/article/details/59562891.为什么需要虚继承如下图所示如果访问Der::Fun or Der::m_nValue就会带来二义性,无法确定是调用Base1的还是Base2的,所以为了解决多重继承情况下成员访问的二义性,引入了虚继承机制。一般继承 ...原创 2017-09-24 16:47:42 · 322 阅读 · 0 评论 -
什么时候析构函数需要定义为虚函数
1.每个析构函数(不加 virtual) 只负责清除自己的成员。2.可能有基类指针,指向的确是派生类成员的情况。(这是很正常的), 那么当析构一个指向派生类成员的基类指针时,程序就不知道怎么办了。 所以要保证运行适当的析构函数,基类中的析构函数必须为虚析构。 基类指针可以指向派生类的对象(多态性),如果删除该指针delete []p;就会调用该指针指向的原创 2017-07-12 09:22:36 · 2235 阅读 · 1 评论 -
实现只能动态分配或只能静态分配。
静态分配是在栈上定义一个对象,动态分配是在堆上new一个对象。只能静态分配很简单,就只要禁止new操作就好了,所以只需要重载下new运算符,使其为private或protetc就好。只能动态分配的话,当我们可以将析构函数定义为私有或protect,这样编译器在编译时发现无法正常调用析构函数,因此会禁止在栈上定义一个对象,(当然我们不能将构造函数,定义为private或protect,因为这原创 2017-07-27 19:31:25 · 1032 阅读 · 0 评论 -
构造函数、析构函数 与抛出异常
1. 抛出异常1.1 抛出异常(也称为抛弃异常)即检测是否产生异常,在C++中,其采用throw语句来实现,如果检测到产生异常,则抛出异常。该语句的格式为: throw 表达式;如果在try语句块的程序段中(包括在其中调用的函数)发现了异常,且抛弃了该异常,则这个异常就可以被try语句块后的某个catch语句所捕获并处理,捕获和处理的条件是被抛弃的异常的类型与catch语句原创 2017-08-04 17:40:52 · 213 阅读 · 0 评论 -
构造函数、拷贝构造函数、赋值函数
转自C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法。下面就详细比较下三者之间的区别以及它们的具体实现1.构造函数构造函数是一种特殊的类成员函数,是当创建一个类的对象时,它被调用来对类的数据成员进行初始化和分配内存。(构造函数的命名必须和类名完全相同)首先说一下一个C++的空类,编译器会加入哪些默认的成员函数·默认构转载 2017-08-08 16:05:50 · 293 阅读 · 0 评论 -
拷贝构造函数
拷贝构造函数:当出现用一个对象的值构造另一个对象时,就会调用拷贝构造函数。出现场合:1.将实参传递给形参时。 2.函数返回一个对象时。3.用一个对象直接显示初始化另一个对象,比如class A{};A a1;//对a1赋值A a2(a1);//或 A a2=a1;______________________________________——————————————————原创 2017-07-23 22:36:35 · 234 阅读 · 0 评论 -
为什么构造函数不能声明为虚函数?
自己总结:1.当创建一个子类对象时,如果将构造函数声明为虚函数,因为子类在构造时,会先调用父类的够造函数,但是子类已经覆盖了基类的构造函数(因为是虚函数),所以也就无法进一步执行,导致程序出错。2.虚函数需要通过虚函数指针指向一个虚函数表,当将构造函数声明为虚函数,在创建对象时,首先要调用构造函数,然后构造函数是虚函数,就需要用虚函数指针去调用,但是,对象都还没构造,也就没有虚函数原创 2017-07-21 23:05:22 · 1404 阅读 · 0 评论 -
空结构体与空指针的大小
今天面试遇到了一个很有意思的问题,即空结构体在C++中所占的内存大小是多少?参见如下代码:#include struct S0{ };int main(){ std::cout sizeof S0 std::endl; return 0;} 面试官当场提醒了我一下,说如果S0对象所占用的内存大小为0,那么将可以申请无限多个此类型的对象数转载 2017-07-09 22:21:27 · 1674 阅读 · 0 评论 -
菱形继承与解决方案
转载自:http://blog.csdn.net/xiaolewennofollow/article/details/52203891在C++继承中考虑这样一个关系: B与C都是从相同的基类派生的,该基类称为A,然后D多重继承了B和C,因为B和C都包含了A的子对象。所以C包含了A的两个子对象。继承关系如下图从继承图形状上看,有时该继承层次结构称为菱形。没有菱形时,多重继原创 2017-09-21 10:32:32 · 742 阅读 · 0 评论