成员变量包含引用类型(c++常问问题七)

成员变量里面如果包含了引用类型,应该如何初始化此成员变量才不报错

答:需要利用类的初始化列表来构造该成员对象

class dog1
{
public:
	dog1(){m_strName = "peter";};
	string m_strName;
};

class cat1
{
public:

//这里用了两种方法来初始引用类型的成员变量,一种是new,一种是上层传入
//注意..如果构造函数直接构造对象并把对象付给成员,构造函数结束时成员指向的对象也被栈回收了,后果很严重,传入引用对象的话请注意好该对象的生命周期
	cat1(int& nCnt):m_friend(*(new dog1())),m_nfriendCnt(nCnt)
	{
		//...
	}

	dog1& m_friend;
	int &m_nfriendCnt;
};

void main()
{
	int nCnt = 1;
	cat1 c1(nCnt);
	cout<<c1.m_friend.m_strName.c_str();//成功输出"peter"
	cout<<c1.m_nfriendCnt;//成功输出1

	system("pause");
}

这里用了两种方法初始引用类型的成员变量,一种是new(析构函数处记得释放..),一种是上层传入(注意该对象的生命周期)..
注意..如果构造函数直接构造对象并把对象付给成员,构造函数结束时成员指向的对象也被栈回收了,后果很严重,传入引用对象的话请注意好该对象的生命周期

时间: 2024-10-18 12:23:09

成员变量包含引用类型(c++常问问题七)的相关文章

类的常成员变量和引用类型的成员的定义和初始化

class ConstRef { public:     ConstRef(int ii); private:     int i;     const int ci;     int &ri; }; //ConstRef::ConstRef(int ii) //{ //    i = ii;  // ok //    ci = ii; // error:cannot assign to a const //    ri = ii; // error:ri was never initializ

Objective-C——属性与成员变量辨析

上篇中提过,成员变量是在一对大括弧里面声明的:而属性是用先@property声明再用@synthesize合成的.属性是oc语言的一个新的机制,在实际的使用中这两者还是有不少差别的. 类中的成员变量.通过权限修饰符@protected.@private.@public更该它的被訪问权限.而属性是属于类的对象的,通过生成一个该类的对象我们就能够获得它的訪问权. FirstClass.h #import <Foundation/Foundation.h> @interface FirstClass

Objective-C之成魔之路【8-訪问成员变量和属性】

郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 訪问成员变量 从面向对象的封装角度考虑问题, 要想訪问类中的成员变量, 是要通过方法訪问的, 成员变量前面要有作用域限定符(protected, public, private) , 这些存取权限修饰符我们将在后面介绍. 成员变量的訪问, 是通过读取方法(getter) 和设定方法(setter). 訪问成员

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

因为引用类型的成员变量定义时需要赋值,不然其所在的类初始化时有编译错误,所以一直以为不能使用引用类型的变量作为成员变量.但在探讨C++的前置声明知识时,发现是可以定义引用类型的成员变量的. 如下讲解一下如何使用引用类型的成员变量. //AAA.h #pragma once class BBB; class AAA { public:     AAA(BBB &x);     ~AAA();      private:     BBB &b; }; #include "AAA.h&

C++类特殊成员变量(引用、静态、常成员变量)的初始化操作

有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同.这些特殊的类型的成员变量包括: a.引用 b.常量 c.静态 d.静态常量(整型) e.静态常量(非整型) 常量和引用,必须通过参数列表进行初始化. 静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末. 参考下面的代码以及其中注释: #include <iostream> using namespace std; class BClass { public: BClas

【转】C++ const成员变量和成员函数(常成员函数)

转:http://c.biancheng.net/view/2230.html 在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定.const 可以用来修饰成员变量和成员函数. const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字.初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表,这点在前面已经讲到了,请猛击<C++初始化列表>回顾. const成员函数(常成员函数) const 成员函

1.(1)编写一个接口ShapePara,要求: 接口中的方法: double getArea():获得图形的面积。double getCircumference():获得图形的周长 (2)编写一个圆类Circle,要求:圆类Circle实现接口ShapePara。 该类包含有成员变量: radius:public 修饰的double类型radius,表示圆的半径。 x:private修饰的dou

package jiekou1; public interface ShapePara { //定义常量PI final double PI=3.14; //定义抽象方法 //获得图形面积 double getArea(); //获得图形周长 double getCircumference(); } package jiekou1; public class Circle implements ShapePara { //定义成员变量 public double radius; public d

Objective-C之成魔之路【8-访问成员变量和属性】

重开发者的劳动成果,请勿转载 访问成员变量 从面向对象的封装角度考虑问题, 要想访问类中的成员变量, 是要通过方法访问的, 成员变量前面要有作用域限定符(protected, public, private) , 这些存取权限修饰符我们将在后面介绍. 成员变量的访问, 是通过读取方法(getter) 和设定方法(setter). 访问成员属性: 可以使用点运算符.,或发送消息[] 以上一节中的音乐类为例子: Song.h文件 @interface Song : NSObject { NSStri

C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法

有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同.这些特殊的类型的成员变量包括: a.引用 b.常量 c.静态 d.静态常量(整型) e.静态常量(非整型) 常量和引用,必须通过参数列表进行初始化.    静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末. 参考下面的代码以及其中注释:#include <iostream>using namespace std; class BClass{public: BClass