C++基础复习提升-this那些事

C++基础复习提升-this那些事

参考C++那些事-光程大佬的网站
上一篇C++基础复习提升-static那些事
下一篇C++基础复习提升-inline那些事

(1) 一个对象的this指针并不是对象本身的一部分(与python中的self异曲同工),不会影响sizeof(对象)的结果。
(2) this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。所以this指向的其实就是传入的对象地址,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。而静态成员程序为它们在静态存储中单独分配了空间,它们没有this指针。注意静态成员函数不能使用const修饰为常静态成员函数,因为声明一个非静态成员函数为const时,this指针相当于类名 const,而静态成员函数没有this指针。常函数写法:void func() const;,const修饰函数返回值的写法:const void func();静态函数可以用后者来构建,但是无法使用前者构建。
(3) 在类的非静态成员函数中返回类对象本身,直接使用return *this;
(4) 当参数与成员变量名相同时,正确写法:this->n=n;错误写法n=n;

#include <iostream>
#include <cstring>

using namespace std;

class Person {
public:
    // 枚举类型enum
    typedef enum {
        BOY = 0,
        GIRL,
    } SexType;

    Person(char *n, int a, SexType s) {
        // strlen获取字符数组的长度
        this->name = new char[strlen(n) + 1];
        // strcpy将n的内容复制到name
        strcpy(name, n);
        this->age = a;
        this->sex = s;
    }

    // 使用常函数,提高程序的健壮性,this指向const Person *const
    int get_age() const {
        return this->age;
    }

    // 对象初始化时调用
    static const SexType get_enum() {
        return GIRL;
    }

    // 返回sex值
    SexType get_sex() const { return this->sex; }

    // 隐式传入this指针,this指向Person *const
    Person &add_age(int a) {
        // 调用该对象时,对该对象的age重新赋值
        this->age += a;
        // 返回对象本身
        return *this;
    }

    ~Person() {
        // 释放掉堆内存的对象
        delete[] name;
    }


private:
    char *name;
    int age;
    SexType sex;

};

int main() {
    Person p("zhangsan", 20, Person::get_enum());
    // age:20
    cout << p.get_age() << endl;
    // age:30
    cout << p.add_age(10).get_age() << endl;
    // sex:1
    cout << p.get_sex() << endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值