C++核心编程和桌面应用开发 第六天(this指针 友元)

目录

1.this指针

1.1C++中空类的大小

1.2类中成员的存储方式

1.3this指针

1.3.1常函数

1.3.2常对象

2.友元

2.1全局函数做友元

2.2类做友元

2.3成员函数做友元


1.this指针

1.1C++中空类的大小

1.2 类中成员的存储方式

1.3this指针

this指针指向被调用的成员函数所属的对象,本质是一个指针常量,指针的指向不可修改,指针指向的值可以修改。

注意:静态成员函数内部没有this指针, 静态成员函数不能操作非静态成员变量。

class Person
{
public:
	Person(int age)
	{
		this->age = age;
	}

    Person& myPerson(Person& p)
    {
        this->age=this->age+p.age;
        //返回自身对象
        return *this;
    }

	int age;
};

空指针可以调用类内的成员函数,但是若类内用到this指针则不能

1.3.1常函数

函数的形参列表后加const关键词,修饰this指针,指针指向的值指针的指向都不可以修改。

关键字mutable会让成员变量在常函数中也可以修改

1.3.2常对象

对象前加const关键字修饰对象

const Person p1;
  • 常对象无法修改成员属性;常函数无法修改成员属性
  • 常对象可调用常函数,无法调用普通成员函数。

关键字mutable会让常对象也可以修改自身属性

2.友元

友元是一种特权函数或类,这个特权函数或类可以访问私有成员

2.1全局函数做友元

class Room
{
//全局函数声明为友元函数,即可访问私有变量
friend void goodFriend(Room& room);

public:
	Room()
	{
		m_SittingRoom = 'a';
		m_BedRoom = 'b';
	}
	char m_SittingRoom;

private:
	char m_BedRoom;
};

void goodFriend(Room& room)
{
	room.m_SittingRoom;
	room.m_BedRoom;
}

void badFriend(Room& room)
{
	room.m_SittingRoom;
}

2.2类做友元

class GoodFriend
{
public:
	GoodFriend();
	void visit();
	Room* room;
};

class Room
{
//GoodFriend类可以访问Room类中的私有成员
friend class GoodFriend;

public:
	Room();
	char m_SittingRoom;
private:
	char m_BedRoom;
};

GoodFriend::GoodFriend()
{
	room = new Room;
}

void GoodFriend::visit()
{
	room->m_SittingRoom;
	room->m_BedRoom;
}

Room::Room()
{
	m_SittingRoom = 'a';
	m_BedRoom = 'b';
}

2.3成员函数做友元

class GoodFriend
{
public:
	GoodFriend();
	void visit1();
	void visit2();
	Room* room;
};

class Room
{
//将成员函数在类内声明为友元 
friend void GoodFriend::visit1();
public:
	Room();
	char m_SittingRoom;
private:
	char m_BedRoom;
};

GoodFriend::GoodFriend()
{
	room = new Room;
}

void GoodFriend::visit1()
{
	room->m_SittingRoom;
	room->m_BedRoom;
}

void GoodFriend::visit2()
{
	room->m_SittingRoom;
}

Room::Room()
{
	m_SittingRoom = 'a';
	m_BedRoom = 'b';
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值