目录
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';
}