我们经常听到建议要把构造函数不能为虚,析构函数最好为虚,这是为什么?如下例子:// pvtable1.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include using namespace std;class Base1 {public: Base1()...
分类:
其他好文 时间:
2015-08-21 19:05:27
阅读次数:
144
题目:为下面的Rectangle类实现构造函数,拷贝构造函数,赋值操作符,析构函数。class Shape{ int no;};class Point{ int x; int y;};class Rectangle: public Shape{ int width; int height; Poin...
分类:
编程语言 时间:
2015-08-21 18:57:04
阅读次数:
209
异常一、为什么要有异常——WHY?1.通过返回值表达错误局部对象都能正确的析构层层判断返回值,流程繁琐2.采用里面定义的setjmp/longjmp远程跳转一步到位进入错误处理,流程简单setjmp是给C程序员使用的,根本没有考虑到C++程序员定义的类类型,直接采用setjmp实现跳转会使得某些对象...
分类:
编程语言 时间:
2015-08-21 07:05:11
阅读次数:
196
C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数、抽象类、虚析构函数、动态创建对象
一、纯虚函数
1、虚函数是实现多态性的前提
需要在基类中定义共同的接口
接口要定义为虚函数
2、如果基类的接口没办法实现怎么办?
如形状类Shape
解决方法
将这些接口定义为纯虚函数
3、...
分类:
编程语言 时间:
2015-08-21 00:08:48
阅读次数:
309
#include using namespace std;class A{public: A() { cout << "A create" << endl; } virtual ~A() { cout << "A delete" << end...
分类:
其他好文 时间:
2015-08-21 00:06:52
阅读次数:
182
弱引用(指针)指的是这样一个概念:引用不控制对象的生命周期,但是对象本身销毁后,弱引用能得到“通知”。
WeakPtr的实现思路(概念上的):(WeakPtr 1)===> (引用结构 2) (实际的对象 3)
当(实际的对象3)由于调用析构函数销毁自己时,可以清除(引用结构 2)里面的信息,这样(WeakPtr 1)就得到了null,相当于被通知到了
一种可能的实现...
分类:
其他好文 时间:
2015-08-20 16:49:47
阅读次数:
209
C++ Primer学习笔记33_面向对象编程--虚函数与多态(一):多态、派生类重定义、虚函数的访问、 . 和->的区别、虚析构函数、object slicing与虚函数
一、多态
多态可以简单地概括为“一个接口,多种方法”,前面讲过的重载就是一种简单的多态,一个函数名(调用接口)对应着几个不同的函数原型(方法)。
更通俗的说,多态行是指...
分类:
编程语言 时间:
2015-08-20 01:28:40
阅读次数:
283
C++ Primer 学习笔记_31_面向对象编程(2)--继承(二):继承与构造函数、派生类到基类的转换 、基类到派生类的转换
一、不能自动继承的成员函数
构造函数
拷贝构造函数
析构函数
=运算符
二、继承与构造函数
基类的构造函数不被继承,派生类中需要声明自己的构造函数。
声明构造函数时,只需要对本类中新增成员进行初始化,...
分类:
编程语言 时间:
2015-08-19 20:35:33
阅读次数:
162
(参考自《深入理解C++对象模型》)”C++新手一般有两个常见的误解:任何class如果没有定义default constructor,就会被合成一个出来.编译器合成出来的default constructor会明确设定class 内每一个data member的默认值.”现在主要解释第一条为什么是...
分类:
编程语言 时间:
2015-08-19 16:33:02
阅读次数:
182
1. 成员函数只有被需要(被调用)才必须有定义,同理,只有当默认构造函数,拷贝构造函数,赋值操作符,析构函数被需要而类定义它们时,它们才会被编译器创建出来(除非函数在基类中被声明为虚函数,编译器产生的函数是非虚的,public的).2. 并不是只要类没有定义默认构造函数,拷贝构造函数,赋值操作符时编...
分类:
编程语言 时间:
2015-08-19 16:08:28
阅读次数:
121