C++类的成员函数和友元函数及静态成员

之前见识和运用的都是全局函数,在这里对成员函数和友元函数做个学习小记。

目录

成员函数:

成员函数的定义方法:

1、直接在类的内部定义

2、在类外使用范围解析运算符

成员函数的调用:

友元函数

静态成员


成员函数:

类的成员函数与普通函数一样,都有返回值和参数列表,不同的是——成员函数是一个类的成员,它出现在类体中,作用范围由类来决定。

成员函数可以操作类的任意对象,可以访问对象中的所有成员。

在C++中,对于任意一个类,都会提供四个默认的成员函数——构造函数、析构函数、拷贝构造函数、赋值函数。

成员函数的定义方法:

成员函数有两种定义方法:

1、直接在类的内部定义

#include<iostream>
using namespace std;
int main()
{
	class Goust
	{
		int a;
		int b;
		int c;
		int name()
		{
			return a+b+c;
		}
	};
}

2、在类外使用范围解析运算符

class Goust
	{
		int a;
		int b;
		int c;
		int name();
	};
	int Goust::name()
	{
		return a+b+c;
	}

(不要在主函数中用,会报错)

成员函数的调用:

在对象上使用点运算符

Goust xx;
xx.name();

结合举例

#include<Windows.h>
#include<iostream>
using namespace std;
class Goust
{
	public:
		int a;
		int b;
		int c;
		int name();
		void za(int ab)
		{a=ab;}
		void zb(int bc)
		{b=bc;}
		void zc(int cd)
		{c=cd;}
};
	int Goust::name()
	{
		return a+b+c;
	}
int main()
	{
		Goust xx;
		int d=0;
		xx.za(4);
		xx.zb(7);
		xx.zc(9);
		d=xx.name();
		cout<<d;
		Sleep(10000);
        return 0;
	}

输出 

友元函数

类的友元函数定义在类的外部,但有权力访问类里的私有成员和保护成员。友元可以是一个类,也就是友元类,类及其所有成员便均是友元。

友元所使用的关键字是friend

简单代码示例

#include<Windows.h>
#include<iostream>
using namespace std;
class Goust
{
	int m;
	public:
		void trans(double t);
		friend void pri(Goust goust);
};
	void Goust::trans(double t)
	{
		m=t;
	}
	void pri(Goust goust)
	{
		cout<<goust.m<<endl;
	}
int main()
	{
		Goust goust;
		goust.trans(67);
		pri(goust);
		Sleep(10000);
		return 0;
	}

输出

友元函数可以访问类中的私有成员和其他数据,但是访问不可直接使用数据成员,需要通过对对象进行引用(因为友元函数里不含this指针)。

但是,当其访问的是静态成员(static)时,则不需要对对象进行引用。(具体原因看下面)

例如

#include<Windows.h>
#include<iostream>
using namespace std;
class Goust
{
	double m;
	static int z;
	public:
		void tran(int p);
};
int Goust::z;//声明
	void tran(int p)
	{
		z=p;
		cout<<z;
	}
	
int main()
	{
		goust.tran(87);	
		Sleep(10000);
		return 0;
	}

在定义静态成员时,别忘了再类后面声明或者初始化。

静态成员

  • 无论创建多少个类的对象,静态成员都只有一个副本。
  • 他在类的所有对象中是共享的。
  • 如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。
  • 静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。
  • 静态成员函数有一个类范围,不能访问类的 this 指针。可用于判断类的某些对象是否已被创建。
  • 不能把静态成员的初始化放置在类的定义,可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化。
class Goust
{
	public:
		double m;
		static int z;
	...............
};
int Goust::z;
....
.....
.....
int main()
	{
		Goust goust;
		..........
		cout<<goust.m;
		cout<<Goust::z;//输出上的不同
		return 0;
	}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值