关于类名后加&符号时基类引用派生类的问题

原创 2016年06月02日 12:38:01



 关于类名后加&符号时基类引用派生类的问题

例如

class CData

{

};

 

CData& fun(CData& a,CData& b)

{

....

};

 

这是引用。

 

 

指针和引用的声明方式:

声明指针: char*pc;

声明引用: char c ='A'

          char& rc = c;

 

它们的区别:

①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。

这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。(指针对象可以改变)

但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。

(注意对象不改变但是对象的内容可以改变)

从内存分配上看,程序为指针变量分配内存区域,而不为引用分配内存区域,

   因为引用声明时必须初始化,从而指向一个已经存在的对象。引用不能指向空值。

从编译上看,程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。

指针变量在符号表上对应的地址值为指针变量的地址值(变成了指针本身自己的地址值)

而引用在符号表上对应的地址值为引用对象的地址值。

符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。

这是使用指针不安全而使用引用安全的主要原因。从某种意义上来说引用可以被认为是不能改变的指针。

④不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。

因为在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。

⑤理论上,对于指针的级数没有限制,但是引用只能是一级。如下:

 int** p1; // 合法。指向指针的指针

  int*&p2; // 合法。指向指针的引用

 int&* p3; // 非法。指向引用的指针是非法的

 int&& p4; // 非法。指向引用的引用是非法的

  注意上述读法是从左到右。

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++中的&引用符号全解

引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有...
  • king16304
  • king16304
  • 2016年08月15日 11:29
  • 1036

派生类和基类的函数调用

这篇文章举了一个简单的例子说明派生类和基类在虚函数和普通函数的问题; 首先声明派生类和基类,并进行定义,如下所示: 声明部分(Header.h): class FATHER { public: vo...
  • GK_2014
  • GK_2014
  • 2015年05月13日 22:57
  • 1390

JVM中的直接引用和符号引用

在JVM中,类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。而解析阶段即是虚拟机将常量池内的符号引用替换为直接引用的过程。 ...
  • u014656992
  • u014656992
  • 2016年04月09日 20:21
  • 7311

派生类和基类中的成员变量名相同(转)

源地址 当派生类中的成员变量和基类中同名,那么与函数同名一样,基类中的同名变量会被隐藏。也就是通过派生类对象无法访问基类的同名变量。例一:class base { public: int a...
  • batuwuhanpei
  • batuwuhanpei
  • 2016年08月02日 15:13
  • 644

C++中派生类重写基类重载函数时需要注意的问题:派生类函数屏蔽基类中同名函数

派生类可以继承基类中的非私有函数成员,当然也就可以继承其中非私有的被重载的函数。如下: 【参考代码】 class Base { public: void print() { cout...
  • IIcyZhao
  • IIcyZhao
  • 2013年09月22日 19:00
  • 4931

基类指针指向派生类对象

父类子类指针函数调用注意事项 1,如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩) 2,如果以一个衍生类指针指向一个基础类对象,必须...
  • yuanmeng567
  • yuanmeng567
  • 2014年02月25日 09:36
  • 4945

派生类,基类类型转换

派生类,基类类型转换
  • kturing
  • kturing
  • 2015年06月19日 10:26
  • 1162

C++中引用符号“&”的作用总结

今天在写程序中用到了运算符重载,为了方便地输出vector容器中的元素,我重载了 template std::ostream &operator &v) { for (const auto ...
  • bdss58
  • bdss58
  • 2014年09月18日 19:53
  • 1154

走进C++程序世界------继承和派生

继承和派生  继承是面向对象编程语言的最重要方面之一,正确的使用继承可编写出设计良好,容易于维护和扩展的应用程序。下面是在其他博客中的总结: *****************************...
  • jsh13417
  • jsh13417
  • 2013年09月24日 23:05
  • 1836

java运算符和几个引用类

1.运算符(优先级:1元>2元>3元)         运算符是用来计算数据的指令。数据可以是常量,也可以是变量。被运算符操作的数成为操作数。 a).算数运算符 运算符 ...
  • u013046774
  • u013046774
  • 2016年02月29日 22:03
  • 659
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于类名后加&符号时基类引用派生类的问题
举报原因:
原因补充:

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