c++类内可以定义引用成员变量,但要遵循以下三个规则:
1、不能用默认构造函数初始化,必须提供构造函数来初始化引用成员变量。否则会造成引用未初始化错误。
2、构造函数的形参也必须是引用类型
3、不能在构造函数里初始化,必须在初始化列表中进行初始化。

构造函数分为初始化和计算两个阶段,前者对应成员初始化链表,后者对应构造函数函数体。引用必须在初始化阶段,也即在成员初始化链表中完成,否则编译时会报错(引用未初始化)。

示例:

#include <iostream>
using namespace std;class A
{public:A(int &target) :a(target){cout << "构造函数" << endl;}void printA(){cout << "a is:" << a << endl;}
private:int &a;
};
int main()
{int a = 20;A r(a);//依旧使用自定义的构造函数r.printA();int &b = a;A r1(b);r1.printA();system("pause");return 0;
}

结果为:

c++之类内定义引用成员相关推荐

  1. static不应在文件范围内定义的成员函数上使用

    转自: http://zhidao.baidu.com/link?url=3cG_RJDfBQnzKzhnKaoL4wTkT_C0JDmdn0MH4eSPDe9clrnR4d1iJkYxWm88Z2Q ...

  2. C++使用static的错误:无法解析的外部符号、“static”不应在文件范围内定义的成员函数上使用

    // static_test.h : 头文件 002 #pragma once 003 004 class static_test 005 { 006 public: 007 static_test( ...

  3. (教学思路 c#之类一)声明类和对象、定义类成员及其引用

    上一节(教学思路 c#之面向对象二)初步理解面向对象的基本概念中,我没有提到任何的代码,只是用语言和实例来说明什么是类和对象以及面向对象的特性等基本概念,类是c#程序语言的重要核心,也是构建应用程序最 ...

  4. 类的定义,成员函数和内置成员函数

    目录 类的定义: 类的权限修饰符: 类定义对象的方法: 类成员函数: 成员函数的存储方式: 对象成员的引用: 类的定义: 类是对象的抽象,而对象是类的具体实例: 类是抽象的,不占用内存:对象是具体的, ...

  5. 在类内定义成员函数、在类外定义成员函数、计算长方体的体积【C++面向对象编程类的使用经典案例】

    文章目录 一.在类内定义成员函数 二.在类外定义成员函数(使用符号::) 三.计算3个长方体的体积(class成员函数) 一.在类内定义成员函数 #include <iostream> u ...

  6. 设计一个圆类(circle),内有私有成员radius代表半径, 函数get_radius( )用于获得半径、area( )用于计算圆的面积; (2)定义一个桌子类table,内有私有数据h

    1.(1)设计一个圆类(circle),内有私有成员radius代表半径, 函数get_radius( )用于获得半径.area( )用于计算圆的面积: (2)定义一个桌子类table,内有私有数据h ...

  7. C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别

    一般我们进行成员变量初始化用两种方法 第一种是通过在构造函数内赋值 class Point { public: Point(){ _x = 0; _y = 0;}; Point( int x, int ...

  8. 在打字稿中,是什么! (惊叹号/ bang)运算符取消引用成员时?

    本文翻译自:In Typescript, what is the ! (exclamation mark / bang) operator when dereferencing a member? W ...

  9. vector在类内定义vector<int> vec(10,0); 报错原因分析

    注意使用的过程中别忘记: 添加头文件#include < vector >, 添加命名空间 using namespace std. 常用的函数的定义格式介绍: vector 类成员变量的 ...

最新文章

  1. pandas在dataframe指定位置添加新的数据列、使用insert函数
  2. 初识LVS(二)——LVS的DR工作模式
  3. 一个数字可以在不损失精度的情况下达到的JavaScript的最高整数值是多少?
  4. oracle 递归查询
  5. Delphi绘制Alpha图像的函数
  6. cocos2d-x lua 学习笔记(1) -- 环境结构
  7. Spring MVC文件上传
  8. 伦茨8400变频器面板按键说明_变频器调试笔记
  9. RelationTrack解读
  10. VUE之监听属性 watch
  11. Java 在指定目录下查找文件
  12. SQL函数 left()、charindex()的使用
  13. winpcapp配置c++网口通讯_(经验)西门子PLC的Modbus TCP通讯的一些经验
  14. D3.js以及通用JS(JavaScript)读取并解析server端JSON的注意事项
  15. Stanford CS230深度学习(五)CNN和ResNet
  16. 揭开伟大架构师的秘密
  17. 第 4 章 terminal
  18. 创建Maven分布式前台系统架构,写出京动态导航,跨域返Json数据
  19. Rhel6-piranha配置文档
  20. 寻找代理服务器的常用软件

热门文章

  1. Excel里数字太长显示为科学计数法如何显示完整数字
  2. IDEA debug HashMap源码的心得
  3. z6青春版刷Android11,联想Z6青春版官方安卓9.0固件线刷降级包:L38111_ZUI_11.0.100
  4. ubuntu 10.04 安装sun java
  5. 实验四:存储器扩展实验(Yanlz+Unity+XR+实验课+字位扩展+片选信号+RAM+ROM+磁盘阵列+RAID+立钻哥哥+==)
  6. .bat和.sh命令一条命令分行写
  7. iOS音乐后台播放、锁屏封面及播放控制
  8. SQL 自连接 (self join)
  9. 写给刚接触Auto CAD新人的建议——第二期
  10. 如何使用xcode将应用安装到IPhone上