美文网首页
类调用其他类成员/静态函数/this指针

类调用其他类成员/静态函数/this指针

作者: Sheik | 来源:发表于2021-07-30 17:45 被阅读0次

环境:ide:Mac+clion

视频链接:
https://www.bilibili.com/video/BV1Hb411Y7E5?p=5

一个类是另外一个类的成员属性,构造函数和析构函数的执行顺序。

1。构造函数,先执行其他类的构造,再执行本类构造。
2。析构函数和构造函数的执行顺序正好相反。

class Phone{
public:
    string phoneNumber;
    Phone(){
        cout <<"Phone默认构造函数!"<<endl;
    }

    ~Phone(){
        cout << "Phone析构函数"<<endl;
    }

    Phone(string number):phoneNumber(number){
        cout <<"Phone有参构造函数"<<endl;
    }


};

class Person{
public:
    Phone phone;
    string m_Name;
    //再这里有一个隐示转化,Phone p_Name = pName; 这里就是通过隐示调用构造其他类有参构造函数进行。也就是上面的 Phone(string pName) : p_Name(pName) 构造函数。
    Person(string phone,string name):phone(phone),m_Name(name){
        cout <<"Person 有参构造函数执行"<<endl;
    }
    ~Person(){
        cout <<"Person 析构函数执行。"<<endl;
    }
};

    Person p("phone","皮特");
//    Phone有参构造函数
//    Person 有参构造函数执行
//    Person 析构函数执行。
//    Phone析构函数

静态成员函数:

1.所有的对象都共享一个函数。
2.静态成员函数,只能访问静态成员变量

class Person{

public:
    static void func(){
//       m_Name = "这里只能访问static 变量";
        //m_Age = 10;
        cout <<"静态函数被调用"<<endl;
    }

    void func1(){
        cout << "普通函数被调用"<<endl;
    }

    string m_Name;
    static int m_Age;
};

    Person person;
    person.func1();//这是通过对象的方式调用。
    person.func();
    Person::func();//可以直接通过类名来调用。

c++中对象模型和指针:

1.c++编译器会给每一个空对象,分配一个字节的空间.
2.只有成员变量的数据会保存在对象上,其他的都不会保存在对象上。

class Person{

public:
    //int m_A;
    static int m_B;

     void func(){
        cout <<"普通函数!"<<endl;
    }
    static void s_func(){
         cout <<"静态函数"<<endl;
     }
};
    
Person p;
cout <<sizeof (p)<<endl;//结果是1。证明只有成员变量才会保存在对象上。
class Person{

public:
    int m_A;//非静态成员变量。属于对象上。
    static int m_B;//静态成员函数,不属于对象上。

     void func(){//非静态成员函数,不属于对象上。
        cout <<"普通函数!"<<endl;
    }
    static void s_func(){//静态成员函数,不属于对象上
         cout <<"静态函数"<<endl;
     }
};

Person p;
 cout <<sizeof (p)<<endl;//这里输出是4,因为有一个int 的4个字节。

this 指针:

指向被调用成员函数所属的对象。大白话,就是谁调用它,它就指向哪个对象。如果想返回对象本身,就return *this; 对this 进行解引用。
c++ 是允许空指针调用成员函数。 只要里面没有引用this 就不会报错。 如果对this 做了判空处理,也可以调用。见例子test04()

class Person{
public:
    int m_Age;

    Person(int age){
        this->m_Age = age;//this 指向的是谁调用它就是指向谁。
        cout << "有参构造函数!"<<endl;
    }

    //年龄加法函数
    void add(const Person &person){
         this->m_Age += person.m_Age;
    }

    //这样就实现了累加,也就是可以重复调用该函数实现链式累加。
    Person &linkAdd(const Person &person){
        this->m_Age += person.m_Age;
        return *this;//返回对象本身
    }

    void showClassName(){
        cout << "显示类名Person"<<endl;
    }

    void showClassAge(){
        cout << "显示该类的年龄:"<<this->m_Age<<endl;
    }

};

void test01(){
    Person person(18);
    cout << person.m_Age<<endl;
}

void test02(){
    Person person(18);
    person.add(person);
    cout << person.m_Age<<endl;
}

void test03(){
    Person person(10);
    person.linkAdd(person).linkAdd(person).linkAdd(person);
    cout << person.m_Age<<endl;//80
}

void test04(){
    Person  * person = NULL;
    person->showClassName();//这里调用是不就报错的。 因为它里面没有使用到this指针
//    person->showClassAge();//这里会报错。因为这里用了this 指针调用。
}

//    test01();
//    test02();
//    test03();
    test04();

相关文章

  • 类调用其他类成员/静态函数/this指针

    环境:ide:Mac+clion 视频链接:https://www.bilibili.com/video/BV1H...

  • C++:复习笔记2

    static 类成员元素多个object只有一份数据 static 类成员函数静态函数没有this指针,只用于访问...

  • C++11可调用对象包装器和绑定器

    可调用对象 在C++中,可以像函数一样调用的有:普通函数、类的静态成员、仿函数、lambda函数、类的成员函数、可...

  • c++11之std::function

    作用: 可以对函数指针(包括全局函数,类成员函数,类静态成员函数),lambda表达式,仿函数做类型消除,也就是说...

  • C++

    框架: 构造函数: 继承中的访问控制: 不允许重载的符号: 成员指针与成员函数指针: const的限定: 类中静态...

  • 7.6 类的静态成员

    7.6 类的静态成员 静态成员的特性 静态成员属于类,而不是对象。 类型可以是类对象、指针、引用、常量等。 静态成...

  • GeekBand.重学C++(4)

    关于 this 指针 调用父类的成员 非 const 成员中 const 成员中 动态绑定与静态绑定 绑定时期 动...

  • C++面向对象-static、const

    静态成员变量 被static修饰的成员变量、函数,可以通过对象,对象指针,类访问,静态成员变量在数据段,类似于全局...

  • C++——指向类成员(数据函数)的指针

    一、指向类数据成员的指针 二、指向类成员函数的指针 三、总结

  • Frida hook基础(一)

    调用静态函数和调用非静态函数 设置(同名)成员变量 内部类,枚举类的函数并hook,trace原型1 查找接口,h...

网友评论

      本文标题:类调用其他类成员/静态函数/this指针

      本文链接:https://www.haomeiwen.com/subject/tgzfvltx.html