C++ 中使用引用类型的成员变量

因为引用类型的成员变量定义时需要赋值,不然其所在的类初始化时有编译错误,所以一直以为不能使用引用类型的变量作为成员变量。但在探讨C++的前置声明知识时,发现是可以定义引用类型的成员变量的。

如下讲解一下如何使用引用类型的成员变量。

//AAA.h
#pragma once

class BBB;

class AAA
{
public:
    AAA(BBB &x);
    ~AAA();
    
private:
    BBB &b;
};

#include "AAA.h"
AAA::AAA(BBB &x) : b(x)
{
}

AAA::~AAA(void)
{
}

//BBB.h
#pragma once

class AAA;

class BBB
{
public:
    BBB(void);
    ~BBB(void);
    void NewAAA();

private:
    AAA *a;
};

//BBB.cpp
#include "BBB.h"
#include "AAA.h"

BBB::BBB()
{
    NewAAA();
}

BBB::~BBB(void)
{
}

void BBB::NewAAA()
{
 BBB b;
 a = new AAA( b );
}

//main.cpp
#include <iostream>

int main()
{
    return 0;
}

如上程序所示,在AAA的头文件中定义了引用类型的成员变量,在AAA的构造函数初始化列表中对其进行了初始化,达到了“使用引用类型的成员变量”的目的。

注意,引用类型的成员变量的初始化必须在构造函数的初始化列表中进行初始化。

时间: 2024-12-29 07:04:58

C++ 中使用引用类型的成员变量的相关文章

在类中添加方法和成员变量

在前面我们也了解到了Java语言的最小单位是类.在C语言中有着全局变量,在Java中也有. 在Java中添加全局变量(成员变量)是由三大部分组成的:访问修饰符.数据类型和成员变量. 而访问修饰符有这几种:public .private.protected或者不写(这种将使用默认访问修饰符). 我们在引用对象时,必须对其进行初始化,否则将会报错.如果我们不自己去初始化值,那马那么 电脑回自己默认初始值:0.0.0.null.false.空字符. 在Java类中添加方法也是由:访问修饰符.返回值.方

java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况

/* 样例1: class Parent{ int num = 3; } class Child extends Parent{ int num = 4; } */ /* 样例2: class Parent{ } class Child extends Parent{ int num = 4; } */ /* 样例3: class Parent{ void show(){ System.out.println("Parent Show!"); } } class Child exten

JavaSE8基础 抽象类中可以有 普通的成员变量和构造方法

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        代码: //抽象类中可以有 普通的成员变量 abstract class Person { public int num; //构造方法 public Person() { //构造方法的作用是:初始化 子类可以访问的 父类中的成员 num = 1; } } class Javaer extends Person{

Java反射机制可以动态修改实例中final修饰的成员变量吗?

问题:Java反射机制可以动态修改实例中final修饰的成员变量吗? 回答是分两种情况的. 1. 当final修饰的成员变量在定义的时候就初始化了值,那么java反射机制就已经不能动态修改它的值了. 2. 当final修饰的成员变量在定义的时候并没有初始化值的话,那么就还能通过java反射机制来动态修改它的值. 实验: 1. 当final修饰的成员变量在定义的时候就初始化了值 1 public Class Person { 2 private final String name = "damon

Object-c中的属性和成员变量的关系详解

很多人在初学移动开发的时候会对object-c中的合成存取方法感到疑惑,此处尝试为看到本文有缘人答疑解惑,鄙人才疏学浅,难免有疏漏谬误之处,热烈欢迎诸位看官拍砖指点. 1.合成存取方法: OC为增加开发效率,从2.0之后不需要程序员自己来写成员变量的setter和getter方法,取而代之的是自动合成的setter和getter. 系统自动合成setter和getter需要2步: 在类interface部分用@propert指令定义属性. 在实现部分用@synthesize指令声明属性. 属性的

JavaSE7基础 类中成员方法 局部与成员变量名字相同时,使用this访问成员变量

版本参数:jdk-7u72-windows-i586注意事项:博文内容仅供参考,不可用于其他用途. 代码 class Test{ String name; //借助公有的成员方法 访问私有的成员方法 public void setName(String name){ this.name=name; //当前类的对象中的成员变量name = 函数参数列表中局部变量中的name //this 当前类的对象, t对象调用setName方法,this就代表了t } } class Demo{ publi

Java中的局部变量、成员变量和静态变量

直接看代码 public class Variable { // 静态变量,属于类的变量,且用关键字static声明,不属于实例,虽然可以通过实例来调用,但是不建议 private static int staticVar; // 成员变量,属于类对象的变量 private String instanceVar; public static void main(String[] args) { // 局部变量,在方法中申明的变量,不能在出了这个方法,即一对花括号{}之外 的地方使用 // 局部变

java接口中的成员方法和成员变量

接口的含义理解:接口可以理解成统一的"协议",而接口中的属性也属于协议中的内容;但是接口的属性都是公共的,静态的,最终的 接口的成员特点:A:成员变量 只能是常量.默认修饰符 public static finalB:成员方法 只能是抽象方法.默认修饰符 public abstract //所以接口定义属性可以这么写:public interface People { int age=10; String name="输出名字";//接口里面定义的成员变量都是 pu

java中一个类的成员变量初始化过程

Student s = new Student(); 1.加载Student.class文件进内存 2.在栈内存为s开辟空间 3.在堆内存为学生对象开辟空间 4.对学生对象的成员变量进行默认初始化 5.对学生对象的成员变量进行显示初始化 6.通过构造方法对学生对象的成员变量赋值 7.学生对象初始化完毕,把对象地址赋值给s变量 原文地址:https://blog.51cto.com/14651315/2464214