c++类的其他特性

本文详细介绍了C++中类的成员函数,包括定义、inline属性、重载和可变数据成员。同时,探讨了类类型声明、前向声明及其限制。此外,还深入讨论了友元的概念,如类间的友元关系、友元函数的声明与定义,以及友元关系的特性。最后,提到了函数重载和友元的结合使用。
摘要由CSDN通过智能技术生成

一、类成员

1.定义类型的成员必须先定义后使用,而且只会能在类内使用

class screen
{
public:
	typedef string::size_type pos;
private:
	pos a = 0;
	pos b = 0;
	string contents;
};

2.定义在类内部的成员函数是自动inline的,而类外部不是。我们可以显式地在前面加上inline作为声明的一部分

3.和非成员函数一样,成员函数也可以重载,使用方法和之前相同

4.类中成员函数是不可以改变类中数据成员的值的,当我们声明一个可变数据成员时,就可以通过成员函数来改变,即使是const成员函数。使用方法:在成员声明前加上mutable

struct date
{
	void add() const
	{
		x++;        //报错
	}
	int x = 520; 
};
struct date
{
	void add() const
	{
		x++;
	}
	mutable int x = 520;
};

5.返回*this的成员函数

struct date
{
	inline date& add(int num)
	{
		x += num;
		return *this;
	}
	int x = 520;
};

二、类类型

1.声明时可以在类名前加class或struct

struct date a;

2.类的声明:我们可以像函数一样把声明和定义分离开来。这种声明被称为前向声明。在它声明之后定义之前该类是个不完全类型。不完全类型只能在非常有限的情况下使用:可以定义指向这种类型的指针或引用,也可以作为一个已经声明(但没有定义)的函数的参数或返回类型。

int main()
{
	struct date;
}

三、友元进阶

1.类之间的友元关系,指定date为node的友元,则友元类(date)的成员函数可以访问此类(node)包括非公有成员在内的所有成员

struct node
{
	friend struct date;
private:
	int y = 1314;
};
struct date
{
	int cmb()
	{
		node a;
		return x + a.y;
	}
	int x = 520;
};

2.友元关系不具有传递性,a的友元是b,b的友元是c,但a不能访问c

3.除了为整个类提供友元外,也可以单独为某个成员函数声明友元,流程如下:

定义a类,声明f函数->定义b类,声明友元->定义f函数(下面的程序有问题...)

struct date
{
	int cmb();
	int x = 520;
};
struct node
{
	friend int date::cmb();
private:
	int y = 1314;
};
int date::cmb()
{
	node a;
	return a.y;
}

4.函数重载和友元

5.友元声明不是一定要在定义之前,当一个名字第一次出现在一个友元声明中,我们隐式地假定该名字在当前作用域是可见的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值