环境:ide:Mac+clion
视频链接:
https://www.bilibili.com/video/BV1Hb411Y7E5?p=5
const 修饰成员函数:称为常函数。
1.如果想修改对象属性的值,那么加入mutable。this本身就是一个const 的指针,指针地址不变,那么加入了const 那么它的值也不会改变。
2.const 修饰对象,叫做常对象,常对象只能调用常函数。
class Person {
public :
Person():m_B(2) {
}
//在函数后面加入const 修饰的是this 指针。让this指向的值不修改。
void show() const {//这个就相当于const Person118 * const this; 常函数,常量指针常量。都不允许修改。
m_A = 10;//加入了mutable 之后,即是在常函数中,也可以修改
// m_B = 100;
}
void func() {
}
mutable int m_A;//加入了mutable 进行修饰。
int m_B;
};
const Person person;//常对象。也不允许修改这个对象的值。常对象只能调用常函数。如果调用普通函数,那么有可能在普通函数中修改其对应的属性值。
// person.m_B = 100;//这里不允许被修改
person.m_A = 100;
cout << person.m_B<<endl;//2
cout << person.m_A<<endl;//100
person.show(); //ok,没有问题。常对象调用常函数。
//person.func();//不允许调用普通函数。如果在func里面修改值是不允许的。
友元:friend 就是声明一些特殊的函数或者类,来访问另一个类的私有成员。
友元的三种实现:
1.全局函数做友元。
2.类做友元。
3.成员函数做友元。
全局函数做友元
class Builder{
friend void goodGay(const Builder &builder);
public:
Builder():m_Room("客厅"),m_BedRoom("卧室"){
}
string m_Room;
private :
string m_BedRoom;
};
void goodGay(const Builder &builder){
cout <<"正在访问客厅:"<<builder.m_Room<<endl;
cout <<"正在访问卧室:"<<builder.m_BedRoom<<endl;
}
Builder builder;
goodGay(builder);
类做友元
class Building{
friend class GoodGay;
public:
Building():m_B("卧室"),m_A("客厅"){
}
string m_A;
private:
string m_B;
};
class GoodGay{
public:
GoodGay();
GoodGay(const GoodGay &goodGay){
this->building = goodGay.building;
}
Building *building;
void visit(){
cout<<"正在访问:"<<building->m_A<<endl;
cout<<"正在访问:"<<building->m_B<<endl;
}
~GoodGay(){
if (building != NULL){
delete building;
building = NULL;
}
}
};
GoodGay::GoodGay() {
building = new Building;
}
void test(){
GoodGay goodGay;
goodGay.visit();
}
成员函数做友元
class Building{
//这句话的意思是,GoodGay::visit成员方法能访问Building 类的私有成员。
friend void GoodGay::visit();
public :
Building();
string m_SittingRoom;
private :
string m_BedRoom;
};
class GoodGay{
public:
GoodGay();
Building *building;
void visit();
GoodGay(const GoodGay &goodGay){
building = goodGay.building;
}
~GoodGay(){
if(building != NULL){
delete building;
building = NULL;
}
}
};
网友评论