C++自学笔记 构造与析构;】的更多相关文章

构造与析构 类不是实体:对象属于类:函数属于类 : 用不同的对象调用同一个类里面的函数的时候,函数知道是哪一个对象在调用它 关键字 this this是一个指针 Point a; a.print(); <=>等价于 Point::print(&a) C++在声明一个变量的时候,只是告诉你存在这个变量,并且C++不会提前把变量所在的地方清空.因此变量声明后的值不一定是0. 而同样是OOP 语言的java就会在声明 的时候提前把变量所在的地方清理为0,因此变量声明后的初始值就是0. 对于这…
条款9:决不再构造和析构过程中调用virtual函数,包括通过函数间接调用virtual函数. 应用:想在一个继承体系中,一个derived class被创建时,某个调用(例如生成相应的日志log)会有相对应的实现. 原因: base class的构造函数会先被调用,而在base class 构造期间virtual函数绝不会下降到dedrived class阶层.事实上,C++的其它部分(dynamic_cast & typeid),在此期间也是一样的把对象视为base class.   解决办…
(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 为方便采用书上的例子,先提出问题,在说解决方案. 1 问题 1: class Transaction{ 2: public: 3: Transaction(); 4: virtual void LogTransaction() const = 0 ; 5: ... 6: }; 7:  8: Transaction::Transaction() //Base cl…
一.拷贝构造函数 1.是一种特殊的构造函数,就是用一个已有的对象去构造其同类的副本对象,即对象克隆. class 类名 { 类名(类名& that) { 对类成员挨个赋值 ... } } 练习:定义一个学生类,实现它的拷贝构造函数.  Student stu2 = stu1; // 调用拷贝构造  stu2 = stu1; // 调用赋值构造 2.编译器会默认生成一个拷贝构造函数  编译生成的拷贝构造函数默认会逐字节复制类中的每一个成员.  如果在类A中有类B成员,会在类A的拷贝构造中自动调用类…
C++存在构造函数与析构函数,继承中也存在构造和析构函数.继承中的构造和析构函数与普通的构造析构有细微差别. 赋值兼容性原则 #include "iostream" using namespace std; class Parent { public: void printP() { printf("父类\n"); } protected: int a; int b; }; class Child : public Parent { public: Child()…
这是我的感觉,具体需要研究一下- 找到一篇文章:在构造和析构中抛出异常 测试验证在类构造和析构中抛出异常, 是否会调用该类析构. 如果在一个类成员函数中抛异常, 可以进入该类的析构函数. /// @file ClassroomExamples.cpp /// @brief xxxx-xxxx课堂笔记的验证代码 /// 测试c++异常 /// 在构造和析构中抛出异常 #include <iostream> #include <limits> #include "MyExce…
JS自学笔记02 1.复习 js是一门解释性语言,遇到一行代码就执行一行代码 2.查阅mdn web文档 3.提示用户输入并接收,相比之下,alert只有提示的作用: prompt(字符串) 接收: var num=parseInt(prompt("输入数字")); 4.调试 1)完成代码后,打开浏览器,f12键打开开发人员工具,sources –双击文件,在某一行代码前面点击一下,将出现断点.刷新页面后才能继续进行调试 左一,断点后内容不再逐步调试,直接完成 左二,将当前断点处的循环…
JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维数组 n表示每个一维数组的元素个数 存储图解: eg:int[][]arr = new int[3][3]; 意义:定义了一个二维数组名为arr,这个二维数组有3个一维数组,名称是arr[0].arr[1].arr[2],每个数组有3个元素,可通过arr[m][n]来访问相应m+1.n+1元素 区分…
JAVA自学笔记10 1.形式参数与返回值 1)类名作为形式参数(基本类型.引用类型) 作形参必须是类的对象 2)抽象类名作形参 需要该抽象类的子类对象,通过多态实现 3)接口名为形参 需要的是该接口的实现类对象 4)类名作返回值类型 返回的是该类的一个对象 class StudentDemo{ public Student getStudent(){ return new Student()}//匿名对象,返回一个student类型 } //创建该类的对象并调用该对象的getStudent()…
JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①public StringBuffer() 无参构造. StringBuffer ssd=new StringBuffer(); Systrm.out.println(ssd);//已被重写,由于没有内容而为空 Systrm.out.println(ssd.capacity());//默认为16 Systrm…