C++类和对象(二)

本文详细阐述了C++中this指针的作用,区分了静态成员和非静态成员的区别,以及常量对象和常量成员的使用规则。通过实例讲解了如何在类中正确地使用这些特性,以及它们在函数调用和数据访问中的限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、this指针

作用:指向成员函数所作用的对象。

非静态成员函数中可以使用this指针指向函数作用的对象的指针。静态成员成员函数中不能this指针,因为静态成员函数并不具体作用于某个对象。所以静态成员函数的参数个数就是实际参数个数,非静态成员函数实际参数个数会比原来多一个this指针。

class Person
{
public:
    int score;
    Person(int s):score(s){}
    Person Add(Person p)//相当于Person Add(Person* this,Person p)
    {
        this->score += p.score;
        return *this;
    }
};
int main()
{
    Person p1(60),p2(90),p3(0);
    p3 = p1.Add(p2);//相当与p3 = Add(&p1,p2);
    return 0;
}

2、静态成员

在前面加了static关键字。普通成员变量每个对象都有一份,静态成员变量为所有对象共享。sizeof不会计算静态成员变量。普通成员函数必须具体作用于某个对象,而静态成员函数并不具体作用于某个对象。静态成员不需要通过对象就能访问

访问静态成员

(1)类名::成员名

(2)和访问普通成员一样(.或*或&),但意思并不是指向这个对象,只是这样表示。

静态成员变量(函数)本质上是全局变量(函数),哪怕对象不存在,类的静态成员变量也存在。设置静态成员的目的就是将和类联系紧密的全局变量和函数写到类里面,看上去像一个整体,易于维护和理解。必须对静态成员变量和函数进行声明。静态成员函数不能访问非静态成员函数(变量)。

class Person
{
private:
    int score;
    static int sum;
public:
    Person(int s):score(s){}
    Person Add(Person p1, Person p2)
    {
        this->sum = p1.score + p2.score;//报错,不能通过this指针访问静态成员变量
        Person p;
        p.sum  = p1.score + p2.score;
        return p;
    }
    static void Print()
    {
        cout << sum<<endl;
        cout << score;//静态成员函数不能访问非静态成员函数(变量)
    }
};
//静态成员变量要声明,写不写初始值都行
int Person::sum=0;
int main()
{
    Person p1(60),p2(90),p3(0);
    cout << Person::score;//报错,不能访问私有成员
    p3 = p3.Add(p1,p2);
    Person::Print();
    return 0;
}

3、常量对象、常量成员

class Person
{
public:
    int a;
    void func(){}
    void myprint() const//myprint是静态成员函数,不能修改它作用的对象
    {
        a = 0;//错,静态成员函数不能修改成员变量的值,静态成员变量除外,因为它本质上是全局变量。
        func();//错,静态成员函数不能调用成员函数,静态成员函数除外
    }
};
const Person p;//p是常量对象
p.a = 10;//错,常量对象不能修改
p.func();//错
p.myprint();//常量对象可以执行常量成员函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值