首页 / C++ / C++指针、this指针、静态成员
C++指针、this指针、静态成员
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++指针、this指针、静态成员,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3976字,纯文字阅读大概需要6分钟。
内容图文
C++指针、this指针、静态成员
一、C++ this指针
this指针指向调用的对象本身,在成员函数中,都会有一个默认的参数this。这点如果学过Python的话,可能会知道,在Python中每一个成员函数都会一个参数self,这里的this就是差不多的东西。其实具体来说,this指针也是指针,它存储的也是一个地址。当我们用一个对象去调用一个成员函数时,我们会把该对象的地址传给该函数,这也就是在函数中的this参数。因此this指针中存储的是调用对象的地址。
下面来看一个简单的例子:
#include <iostream>
using namespace std;
class Line
{
public:
int getL();
void setL(int l);
void printL();
Line();
~Line();
private:
int len;
};
Line::Line()
{
cout << "创建对象" << endl;
}
Line::~Line()
{
cout << "释放内存" << endl;
}
void Line::setL(int l = 3)
{
this->len = l;
}
int Line::getL()
{
return this->len;
}
void Line::printL()
{
int temp;
temp = this->getL();
cout << "Len is:" << temp << endl;
}
int main()
{
Line line,line2;
line.setL(10);
line2.setL();
line.printL();
line2.printL();
return 0;
}
在编程的过程中会发现许多问题,在用指针来得到结构体或者类的成员时我们不能使用’.'运算符来,需要使用->来访问才不会报错。其次,对于一个成员函数如何要使用参数的默认值,在类中定义时,不需要给出默认的函数参数。不然也会报错。
运行结果:
创建对象
创建对象
Len is:10
Len is:3
释放内存
释放内存
刚才看到使用printL()函数利用this指针来调用成员函数和成员变量。还有另外的一种方式来实现同样的操作,那就是友元函数。友元函数不属于类,但可以访问类的所有成员,包括私有成员和保护成员。与成员函数不同的是它没有this指针,它不属于类。
#include <iostream>
using namespace std;
class Line
{
public:
friend void friend_test(Line line);
int getL();
void setL(int l);
void printL();
Line();
~Line();
private:
int len;
};
Line::Line()
{
cout << "创建对象" << endl;
}
Line::~Line()
{
cout << "释放内存" << endl;
}
void Line::setL(int l = 3)
{
this->len = l;
}
int Line::getL()
{
return this->len;
}
void Line::printL()
{
int temp;
temp = this->getL();
cout << "Len is:" << temp << endl;
}
void friend_test(Line line)
{
cout << "Len is :"<< line.len << endl;
}
int main()
{
Line line,line2;
line.setL(10);
line2.setL();
line.printL();
line2.printL();
friend_test(line);
friend_test(line2);
return 0;
}
运行结果:
创建对象
创建对象
Len is:10
Len is:3
Len is :10
释放内存
Len is :3
释放内存
释放内存
释放内存
可以看出,在友元函数中可以直接访问私有变量。
二、类的指针
类的指针同普通变量的指针一样存储对象在内存中的地址。就像上面的this指针一样。
看一个小例子:
#include <iostream>
using namespace std;
class Line
{
public:
int getL();
void setL(int l);
Line();
~Line();
private:
int len;
};
Line::Line()
{
cout << "创建对象" << endl;
}
Line::~Line()
{
cout << "释放内存" << endl;
}
void Line::setL(int l = 3)
{
this->len = l;
}
int Line::getL()
{
return this->len;
}
int main()
{
Line line,line2;
Line *p,*q;
p = &line;
q = &line2;
p->setL(10);
q->setL();
cout << "line Len is: " << p->getL() << endl;
cout << "line2 Len is:" << q->getL() << endl;
return 0;
}
运行结果:
创建对象
创建对象
line Len is: 10
line2 Len is:3
释放内存
释放内存
需要注意的是,类的指针访问类的成员时需要使用->这个运算符。
三、类的静态成员
类中的静态的成员,意思是该类的所有对象共用这一个变量,不会随着对象的创建而被拷贝。讲到通俗一点就是,用static修饰的变量的地址已经锁定了,不可以更改。
静态成员的用法,当静态成员被定义时需要进行初始化。如果没有初始化,那么当该类创建第一个对象时,会自动为所有的静态成员变量进行初始化,值为0;并且在类中定义的静态变量不可以在类中定义时就对其初始化。可以使用:类型 类名::变量名 = 0这种形式来进行初始化。
#include <iostream>
using namespace std;
class Line
{
public:
static int count;
int getL();
void setL(int l);
Line();
~Line();
private:
int len;
};
int Line::count = 0;
Line::Line()
{
cout << "创建对象" << endl;
count++;
}
Line::~Line()
{
cout << "释放内存" << endl;
count--;
}
void Line::setL(int l = 3)
{
this->len = l;
}
int Line::getL()
{
return this->len;
}
int main()
{
Line line;
cout << "已将创建的对象有:"<< line.count << " 个" <<endl;
Line lines[3];
cout << "已将创建的对象有:"<< line.count << " 个" <<endl;
return 0;
}
运行结果:
创建对象
已将创建的对象有:1 个
创建对象
创建对象
创建对象
已将创建的对象有:4 个
释放内存
释放内存
释放内存
释放内存
内容总结
以上是互联网集市为您收集整理的C++指针、this指针、静态成员全部内容,希望文章能够帮你解决C++指针、this指针、静态成员所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。