C++虚函数解析(转载)
- #include <tchar.h>
- #include <iostream>
- using namespace std;
- #pragma pack (1)
- class Person
- {
- private:
- int m_nAge;
- };
- class Man : public Person
- {
- private:
- double m_dHeight;
- };
- int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
- {
- Person Jack;
- Man Mike;
- cout << sizeof(Jack) << endl;
- cout << sizeof(Mike) << endl;
- return 1;
- }
- #include <tchar.h>
- #include <iostream>
- using namespace std;
- #pragma pack (1)
- class Person
- {
- private:
- int m_nAge;
- };
- class Man : public Person
- {
- private:
- double m_dHeight;
- };
- class Woman : public Person
- {
- private:
- double m_dWigth;
- };
- int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
- {
- Person Jack;
- Man Mike;
- Woman Susan;
- cout << &Jack << endl;
- cout << &Mike << endl;
- cout << &Susan << endl;
- return 1;
- }

- Person Jack;
- Man Mike;
- Woman Susan;
开始正题:继承对象的构造和析构浅析:
- #include <tchar.h>
- #include <iostream>
- using namespace std;
- class Person
- {
- public:
- Person()
- {
- cout << _T("基类的构造函数被调用") << endl;
- }
- ~Person()
- {
- cout << _T("基类的析构函数被调用") << endl;
- }
- };
- class Man : public Person
- {
- public:
- Man()
- {
- cout << _T("派生类的构造函数被调用") << endl;
- }
- ~Man()
- {
- cout << _T("派生类的析构函数被调用") << endl;
- }
- };
- int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
- {
- Man Mike;
- return 1;
- }

- #include <tchar.h>
- #include <iostream>
- using namespace std;
- class Person
- {
- public:
- Person()
- {
- cout << _T("基类的构造函数被调用") << endl;
- }
- virtual void Height()
- {
- cout << _T("人类具有身高属性") << endl;
- }
- virtual ~Person()
- {
- cout << _T("基类的析构函数被调用") << endl;
- }
- };
- class Man : public Person
- {
- public:
- Man()
- {
- cout << _T("派生类的构造函数被调用") << endl;
- }
- virtual void Height()
- {
- cout << _T("男人具有身高属性") << endl;
- }
- virtual ~Man()
- {
- cout << _T("派生类的析构函数被调用") << endl;
- }
- private:
- double m_dHeight;
- double m_dWeight;
- };
- int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
- {
- Person* pPersonObj = new Man;
- delete pPersonObj;
- return 1;
- }

- #include <tchar.h>
- #include <iostream>
- using namespace std;
- class Person
- {
- public:
- Person()
- {
- cout << _T("基类的构造函数被调用") << endl;
- }
- virtual void Height()
- {
- cout << _T("人类具有身高属性") << endl;
- }
- ~Person()
- {
- cout << _T("基类的析构函数被调用") << endl;
- }
- };
- class Man : public Person
- {
- public:
- Man()
- {
- cout << _T("派生类的构造函数被调用") << endl;
- }
- virtual void Height()
- {
- cout << _T("男人具有身高属性") << endl;
- }
- virtual ~Man()
- {
- cout << _T("派生类的析构函数被调用") << endl;
- }
- private:
- double m_dHeight;
- double m_dWeight;
- };
- int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
- {
- Person* pPersonObj = new Man;
- delete pPersonObj;
- return 1;
- }

C++虚函数解析(转载)的更多相关文章
- 构造函数为什么不能是虚函数 ( 转载自C/C++程序员之家)
从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的.问题出来了,如果构造函数是虚的,就需要通过 vtable来调用, ...
- C++中的虚函数解析[The explanation for virtual function of CPlusPlus]
1.什么是虚函数? ...
- 【转】C++虚函数解析
本文转自陈皓大叔(左耳朵耗子)的博客www.coolshell.com. 文章是很久之前所写,去年还在写C++时有幸拜读,现在想起来还是相当有价值一转的,如果有一定C++基础(特别是读过<深度探 ...
- C++ 虚函数表解析(比较清楚,还可打印虚函数地址)
C++ 虚函数表解析 陈皓 http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父 ...
- 【转载】 C++多继承中重写不同基类中相同原型的虚函数
本篇随笔为转载,原文地址:C++多继承中重写不同基类中相同原型的虚函数. 在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA { public: ...
- [转载]C++虚函数浅析
原文:http://glgjing.github.io/blog/2015/01/03/c-plus-plus-xu-han-shu-qian-xi/ 感谢:单刀土豆 C++虚函数浅析 JAN 3RD ...
- C++析构函数定义为虚函数(转载)
转载:http://blog.csdn.net/alane1986/article/details/6902233 析构函数执行时先调用派生类的析构函数,其次才调用基类的析构函数.如果析构函数不是虚函 ...
- (C/C++学习)5.C++中的虚继承-虚函数-多态解析
说明:在C++学习的过程中,虚继承-虚函数经常是初学者容易产生误解的两个概念,它们与C++中多态形成的关系,也是很多初学者经常产生困惑的地方,这篇文章将依次分别对三者进行解析,并讲述其之间的联系与不同 ...
- C++虚函数及虚函数表解析
一.背景知识(一些基本概念) 虚函数(Virtual Function):在基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数.纯虚函数(Pure Virtual Functio ...
随机推荐
- MySQL索引优化案例
这里我们分成三种情况进行分析,分别是单表,两表,三表 1.单表 CREATE TABLE IF NOT EXISTS `article`( `id` ) NOT NULL PRIMARY KEY AU ...
- JS 与Flex交互:html中的js 与flex中的actionScript通信
Flex与JavaScript交互的问题,这里和大家分享一下,主要包括Flex调用JavaScript中的函数和JavaScript调用Flex中的函数两大部分内容. Flex 与JavaScript ...
- django单表操作 增 删 改 查
一.实现:增.删.改.查 1.获取所有数据显示在页面上 model.Classes.object.all(),拿到数据后,渲染给前端;前端通过for循环的方式,取出数据. 目的:通过classes(班 ...
- python with和上下文管理工具
对于系统资源如文件.数据库连接.socket 而言,应用程序打开这些资源并执行完业务逻辑之后,必须做的一件事就是要关闭(断开)该资源. 比如 Python 程序打开一个文件,往文件中写内容,写完之后, ...
- java中遍历实体类属性和类型
public static void testReflect(Object model) throws NoSuchMethodException, IllegalAccessException, I ...
- XMPPFrameWork IOS 开发(四)消息和好友上下线
原始地址:XMPPFrameWork IOS 开发(四) 消息 //收到消息 - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XM ...
- 格式化Curl返回的Json字符
格式化Curl返回的Json字符 学习了:https://blog.csdn.net/guijiaoba/article/details/78235523 , 使用python工具 curl xxx ...
- PHPNOW如何添加虚拟主机
1 打开PHPNow控制面板,输入0,点回车 2 新增主机名称(你可以输入127.0.0.2到127.0.0.255),点击回车之后要求输入主机别名,不要写,直接回车,再要求输入网站目录,也不选,再回 ...
- UNIX网络编程调试工具:tcpdump、netstat和lsof
tcpdump程序 tcpdump一边从网络读入分组一边显示关于这些分组的大量信息.它还能够只显示与所指定的准则匹配的那些分组. netstat程序 netstat服务于多个目的: (1)展示网络端点 ...
- 关于ActiveMQ的配置
http://www.cnblogs.com/CopyPaster/archive/2012/04/27/2473179.html