C/C++ 知识点

助记

关于 this:
this 相当于 * const this; //指向不可更改
关于cstring(常量指针): 指向可以更改,指向的内容不可以更改

string hello = "hello";
string hello2 = "hello2";
const char * hello = hello.c_str() //指向可以更改,/内容不可更改
hello =  hello.c_str();//正确

指针常量

int a1 = 10;
int * const a1_prt =&a1; //声明必须初始化,因为指向不能更改,内容可以更改
*a1_prt = 20;

关于friend

全局函数友元

#include "iostream"
#include "string"
using namespace std;
class Building{//建筑物
    //告诉编译器 goodGay全局函数 是 Building类的好朋友,可以访问类中的私有内容
    friend void goodGay(Building * building);
public:
    string m_SittingRoom;//客厅
    Building(){
        m_SittingRoom = "客厅";
        m_BedRoom = "卧室";
    }
private:
    string m_BedRoom;//卧室


};
void goodGay(Building * building){
    cout<<building->m_SittingRoom<<endl;
    cout<<building->m_BedRoom<<endl;
}
void test01(){
    Building building;
    goodGay(&building);
}
int main(){
    test01();
    return 0;
}

类友元

#include "iostream"
#include "string"
using namespace std;
class Building;
class GoodGay{
public:
    GoodGay();
    ~GoodGay();
    void visit(); //访问Building内的属性(public and private)
private:
    Building *building;
};

class Building{
    //告诉编译器GoodGay类是Building类的好朋友,可以访问Building类私有内容
    friend class GoodGay;
public:
    Building();
    void HelloVisit();
public:
    string m_SittingRoom; //客厅
private:
    string m_BedRoom; //卧室
};

Building::Building(){
    m_SittingRoom = "客厅";
    m_BedRoom = "卧室";
}
void Building::HelloVisit() {
    cout << "HelloVisit() 函数中的m_SittingRoom = " << m_SittingRoom << endl;
    cout << "HelloVisit() 函数中的m_BedRoom = " << m_BedRoom << endl;
}

GoodGay::GoodGay(){
     building = new Building;
}

void GoodGay::visit() {
    cout << "GoodGay类中的visit()函数中的m_SittingRoom = " << building->m_SittingRoom <<endl;
    cout << "GoodGay类中的visit()函数中的m_bedRoom = " << building->m_BedRoom <<endl;
}

GoodGay::~GoodGay() {
    if(building!= nullptr){
        delete building;
        building = nullptr;
    }
}

void test(){
    auto * g = new GoodGay ;
    g->visit();
    delete g;
}

int main() {
    test();
    return 0;
}

成员函数友元

#include "iostream"

using namespace std;
class Building;
class GoodGay
{
public:
    GoodGay();
    ~GoodGay();
    void visit();////只让visit函数作为Building的好朋友,可以发访问Building中私有内容
    void visit2();
private:
    Building *building;
};


class Building{
    friend void GoodGay::visit();
public:
    Building()
    {
        m_SittingRoom = "客厅";
        m_BedRoom = "卧室";
    }
private:
    string m_SittingRoom;
    string m_BedRoom;
};


GoodGay::GoodGay() {
    building  = new Building;

}
GoodGay::~GoodGay() {
    if(building != NULL)
    {
        delete building;
        building = nullptr;
    }
}
void GoodGay::visit() {
   cout<<"好基友正在访问:"<<building->m_SittingRoom<<endl;
   cout<<"好基友正在访问:"<<building->m_BedRoom<<endl;
}

void test3(){
    auto * g =new GoodGay;
    g->visit();
    delete g;
}

int main(){
    test3();
    return 0;
}
posted @ 2024-07-17 15:17  一个小笨蛋  阅读(13)  评论(0)    收藏  举报