对象成员以及静态成员变量,静态成员函数的使用

 对象成员

C++类中的成员可以是另一个类的对象,我们称该成员为对象成员

下述代码段中,就存在对应关系:


class Phone
{
public:

	
	Phone(string pName)
	{
		m_Pname = pName;
	}
	//手机品牌名称
	string m_Pname;
};

class Person
{
public:

	Person(string name, string pName):m_name(name), m_Phone(pName)//初始化对象
	{
		
	}
	//这里初始化的过程,其中m_name就是直接在类里面进行赋值操作;而m_Phone进行赋值的时候,
	//就相当于给Phone m_Phone赋值(即对对象赋初值),相当于 Phone m_Phone = pName:隐式转换法,来对对象进行初始化操作


	//姓名
	string m_name;
	//手机
	Phone m_Phone;//Phone是对象成员

	
	//总结:在使用对象成员时,构造时,先构造其他类的对象,再构造自身;(每个部分都定义好了,才能够组成整体)
	//在析构时,先析构对象成员的内存;再析构该对象的内存(析构顺序与构造顺序相反)


};

void test01()
{
	Person p("张三","苹果MAX");
	cout << p.m_name << "拿着" << p.m_Phone.m_Pname << endl;
}


int main()
{
	test01();
	system("pause");
}

其中,要注意初始化成员对象的语法,即person的初始化。对于m_Phone这一对象的初始化,采用的是括号初始化的方法;也可以写作:Phone m_Phone = pName;这样就对其中的属性进行完全初始化。

在成员B作为另一个成员A的成员时,构造的先后顺序为:先构造B,再构造A(先局部,后整体);而析构的顺序为:先整体,后局部。

静态成员 与 静态函数

静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员
static
静态成员分为:

1.静态成员变量
   所有成员共享同一份数据
   在编译阶段分配内存;类内声明,类外初始化


2.静态成员函数
    所有对象共享同一个函数
    静态成员函数只能访问静态成员变量

关于静态成员与静态函数的案例:

静态成员变量:
   所有成员共享同一份数据
   在编译阶段分配内存;类内声明,类外初始化

1. 静态成员变量

静态成员作为公共类型参数,可以被调用,也可以进行修改;但是需要进行声明与初始化。

(类内声明,类外初始化!)

声明的语法:静态成员变量类型 Person: : 静态成员变量名

下述代码段创建了两个成员,两个成员都可以对静态成员进行访问与修改;而访问方法为两类:

利用对象的名称访问、利用类名进行访问。类名访问: 类名 ::静态成员名称


class Person
{
public:
	//所有对象都共享同一份数据
	//在编译阶段分配内存
	//类内声明,类外初始化
	static int m_A;




//当然,静态成员也是有访问权限的
private:
	static int m_B;

};
//这个就是进行类外初始化的过程!
//这个就是进行类外初始化的过程!
//Person::是用来说明该变量的作用域的
int Person:: m_A = 100;
int Person::m_B = 200;


void test01()
{
	Person p;
	cout << p.m_A << endl;//这里无法直接进行打印输出,因为没有完成:类内声明,类外初始化

	Person p2;
	p.m_A = 12220;
	cout << p.m_A << endl;//这里对p.m_A作出修改,那么打印出来的结果是多少?
	//运行结果应该是修改过后的值了,说明这个数据对于不同类来说,是共享的。

}

void test02()
{
	//静态成员变量,不属于某个对象,因为所有对象都共享同一份数据
	//所以静态成员变量有两种访问方式: 通过对象进行访问, 通过类名进行访问
	Person p;
	cout << p.m_A << endl;//通过对象进行访问
	cout << Person::m_A << endl;//通过类名进行访问



	//cout << Person::m_B << endl;//这里进行报错,是无法访问的!(因为private为私有权限,
	//需要在public中创建渠道来对其进行访问)

}


int main()
{

	test01();

	system("pause");
}

2.静态成员函数

静态成员函数:
    所有对象共享同一个函数
    静态成员函数只能访问静态成员变量

下述代码段中,书写了静态成员函数;可以看到在对象中的普通变量m_B是无法通过静态成员函数进行访问的。


class Person
{
public:

	static void func()
	{
		m_A = 100;//静态成员函数可以访问静态成员函数;
		/*m_B = 200;*///这里直接报错,因为静态成员函数无法访问除去静态成员变量以外的变量。
		//原因就是,静态成员变量是共享的,修改后不会对其造成影响;但是对于非静态成员变量,无法确定是那个对象里的变量!!
		cout << "static void func 的调用 " << endl;
	}

	static int m_A;//静态成员变量
	int m_B;

private:
	//静态成员函数也是有访问权限的!
	//除非在public中,为其访问建立链接,否则是无法进行访问的!
	static void func2()
	{
	
	}

};

int Person::m_A = 0;

void test01()
{
	//如何访问静态成员函数呢?(同样的,静态成员函数不属于某一个特定的对象,直接用类名就可以访问)
	//有两种访问静态成员函数的方式:
	//1. 通过对象访问
	Person p;
	p.func();
	
	//2. 通过类名访问
	Person::func();

}


int main()
{
	test01();

	system("pause");
}

总结:

静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员

静态成员分为:
1.静态成员变量
    所有成员共享同一份数据
    在编译阶段分配内存
    类内声明,类外初始化
2.静态成员函数
    所有对象共享同一个函数
    静态成员函数只能访问静态成员变量


 无论是静态成员变量,还是静态成员函数,都是可以放到private里的,这样就无法进行直接访问。 即静态成员变量与静态成员函数都具有访问权限!

并且,在使用静态成员变量之前需要声明且初始化!

初始化语法:静态成员变量   类名 ::静态成员变量名称。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值