读书笔记2

原创 2004年10月31日 00:07:00

关于this指针
虽然this指针大家已经很熟悉了,但是我这里讨论的关于this指针的问题可能大家还没注意过:
为了说明这个关于this的归属问题,我自写了一段再简单不过的程序,虽简单但具体:
#include <iostream.h>
class A
{
public:
 A *p1;
 int m_data1;
 int m_data2;
 A(){m_data1=1;m_data2=this->m_data1;p1=this;}
 void aa(){cout<<"A_aa"<<endl;}
 virtual void aaa(){cout<<"A_aaa"<<endl;}
};
class B:public A
{
public:
 int m_data1;
 int m_data3;
 B(){}
 void print(){cout<<m_data2<<endl<<m_data1<<endl;}
 virtual void aaa(){cout<<"B_aaa"<<endl;}
};
void main()
{
 B b;
 b.print();
 b.p1->aa();
 b.p1->aaa();  
        b.p1->m_data3=0;//编译错###
}
我的问题是指针p1是指向b自身吗?
一看程序,大家就知道:不是,p1指针是指向b的一个隐含父类A的。
对,答案对了(如果你对这一点也怀疑,那你只有自己到vc上试试了。),
在此,我也可以直接给一个证据,那就是上面的编译错,因为A中不存在m_data3。
你的答案其实说明我想要得的一个结论1,那就是this(程序中的)指针是指向A的。
但是,我想问既然p1是指向b的父类的,那么b.p1->aaa()应该调用的是那个函数呢?
答案是B中的那个,如果不是虚函数呢,结果就是A中的那个了(这从结论1中可知),
原来是虚函数捣的鬼,但是这是为什么呢?
虽然从一般意义上好像是这样,但是,P1指针自始至终都是指向A的吧?不是父类的指针指向子类的情况吧?
因为没有出现p1=&b的语句吧。:)

关于多态与虚函数
总结如下:
1)指针:父类的指针可以指向子类对象,但只能调用自身的成员函数和成员变量,除虚函数
外;子类的指针只能指向由父类显示类型转换为子类的对象,调用的是子类自身的
函数和变量,除虚函数外。
2)无指针(对象之间的类型转换):父类对象可以转化为子类对象,仍只能调有
自身的函数和变量,不能调用子类的函数和成员,与虚函数无关;子类对象不能显示
的转换为父类对象,除非人为编写相关代码。

即:虚函数必须与指针一起使用;除开虚函数之外,继承类之间的类型转换没有
什么直接作用。

对象生存方式

四种:stack、 heap、 global、 local static
产生方法:
第一种:在函数中,main()之内
第二种:new方法
第三种:在任何函数范围之外,由startup代码对其初始化。
第四种:在函数范围之内的静态对象

 

《大型网站技术架构》读书笔记二

一、网站的架构模式 1、分层 将系统在横向维度上划分成几个部分,每个部分负责一部分单一的职责,然后通过上层对下层的依赖和调用组成一个完整的系统;例如常见的把整个应用程序分成应用层、服务层和数据层。...
  • tingfeng96
  • tingfeng96
  • 2016年07月26日 13:05
  • 141

《UNIX网络编程 卷2》读书笔记(二)

      如何知道进程在一个空消息队列中放入一个消息?如果阻塞在msgrcv调用中,则除了等待无法做其他事情,如果给msgrcv指定非阻塞标志(IPC_NOWAIT),尽管不阻塞了,但必须持续调...
  • phinecos
  • phinecos
  • 2008年05月27日 16:50
  • 459

读书笔记(穷查理宝典2)

几个有用的观点;1) 先解决哪些具有显而易见的答案的问题;2)运用数学思维;3)反过来思考;4)基本的学术智慧;(应用基本的跨学科智慧,永远不要完全依赖于其他人)5)真正的lollapalooza效应...
  • hawksoft
  • hawksoft
  • 2015年07月02日 12:36
  • 1650

《洗脑术:怎样有逻辑地说服他人》读书笔记(二)

26. 只有惩罚,是达不到任何目的的。惩罚必须和激励结合在一起,才能让人进步。 27. 那些喜欢啰嗦的人,你批评他一万次,他也会不断地重犯。即便没有人再听他说什么,他的这个陋习也会随他一生。 ...
  • cywosp
  • cywosp
  • 2014年03月09日 22:36
  • 3088

【Effective C++读书笔记】篇二(条款02~条款04)

条款02:尽量以 const,enum,inline 替换 #define                                                           #...
  • woxiaohahaa
  • woxiaohahaa
  • 2016年05月06日 22:05
  • 936

Android开发艺术探索读书笔记(二)-跨进程通信

在Androi系统中,为了对内存有一个统一的优化管理,通常对每个进程所能使用的最大内存做出限制。而在开发大型应用程序或者游戏的时候,为了获得更多的内存来支持程序的运行。往往需要在应用中开启多个线程来取...
  • dengminghli
  • dengminghli
  • 2017年02月05日 22:04
  • 775

《TCP/IP详解,卷2:实现》读书笔记-协议控制块

前面讲了很多的铺垫知识,现在终于开始要讲到TCP和UDP了,不过别急,之前会先介绍一个基本和重要的概念:协议控制块。 协议层使用协议控制块存放各UDP和TCP插口所要求的多个信息片。Internet协...
  • stevenmou
  • stevenmou
  • 2007年04月19日 20:04
  • 3065

《MQL4实用编程》读书笔记(2) - 交易操作的编程:基本交易知识

《MQL4实用编程》读书笔记(2) - 交易操作的编程:基本交易知识 普通的交易方式 外汇交易,需由汇客手工或者使用程序,通过客户端向服务器发出交易请求。 应用程序发出的交易请求,由以...
  • lawme
  • lawme
  • 2014年04月10日 07:38
  • 3115

《管理的常识》第二章<什么是组织>读书笔记

一、组织的理解        组织的存在是为了实现目标,组织管理的存在是为了提升效率。        1、组织不是一个“家”         组织是用目标、责任、权力来联结,而不是用情感来联接。简而言...
  • charleslei
  • charleslei
  • 2015年04月04日 20:23
  • 714

《Realtime and Robust Hand Tracking from Depth》读书笔记2

手势识别2
  • u012374012
  • u012374012
  • 2015年01月01日 17:39
  • 720
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:读书笔记2
举报原因:
原因补充:

(最多只允许输入30个字)