this指针 静态成员 友元
- 格式:ppt
- 大小:131.50 KB
- 文档页数:12


this指针及用法this指针是C++中的一个特殊指针,它指向当前对象的地址。
它主要用于在类的成员函数中访问当前对象的成员变量和成员函数。
使用this指针有以下几个方面的用法:1. 访问成员变量:在类的成员函数中,可以使用this指针来访问当前对象的成员变量。
这是因为成员函数中的变量名可能与成员变量名相同,使用this指针可以明确指出要访问的是成员变量而不是局部变量。
例如:cpp.class MyClass {。
public:void setX(int x) {。
this->x = x; // 使用this指针访问成员变量x.}。
private:int x;};2. 返回当前对象:在类的成员函数中,可以使用this指针返回当前对象的引用。
这可以方便地实现链式调用。
例如:cpp.class MyClass {。
public:MyClass& setX(int x) {。
this->x = x;return this; // 返回当前对象的引用。
}。
private:int x;};3. 在构造函数中使用:在构造函数中,this指针指向正在创建的对象。
这可以用于在构造函数中进行成员变量的初始化。
例如: cpp.class MyClass {。
public:MyClass(int x) {。
this->x = x; // 使用this指针初始化成员变量x.}。
private:int x;};4. 解决命名冲突:当类的成员变量与函数参数或局部变量同名时,可以使用this指针来区分它们。
例如:cpp.class MyClass {。
public:void setData(int data) {。
this->data = data; // 使用this指针访问成员变量data.}。
private:int data;};总结起来,this指针在C++中用于在类的成员函数中访问当前对象的成员变量和成员函数,解决命名冲突以及返回当前对象的引用。
c++this的用法在C++中,this是一个特殊的指针,它指向当前对象的地址。
this常常在类方法中使用,用于在类方法中访问对象的成员变量和成员函数。
一、this的基本用法在类方法中,this指针指向调用该方法的对象。
通过使用this指针,可以在类方法中直接访问对象的成员变量和成员函数,而无需使用对象名。
例如:```cppclassMyClass{intx;public:voidsetX(intvalue){x=value;//直接访问成员变量,无需使用对象名}voidprintX(){cout<<x;//直接访问成员变量,无需使用对象名,也可以使用this->x}};```在上面的例子中,setX()和printX()都是类方法,它们都使用了this指针来访问对象的成员变量x。
二、this的注意事项1.避免重复使用对象名和this指针:在类方法中,尽量避免重复使用对象名和this指针来访问对象的成员变量和成员函数。
这会导致代码冗余和难以阅读。
2.使用this指针时需要小心指针赋值:如果一个类方法被另一个类方法返回,并且该方法返回一个指向当前对象的指针,那么这个指针需要使用对象的地址来赋值。
否则,会导致悬空指针或未定义的行为。
3.this指针是类的内部指针:this指针是类的内部指针,不应该被外部代码直接访问。
如果外部代码需要访问对象的成员变量和成员函数,应该使用对象名来访问。
4.this指针的传递:如果需要在类方法中使用其他类的方法,可以将this 指针作为参数传递给其他类的方法。
但是需要注意,传递this指针可能会导致代码难以理解和维护。
三、this的常见用法示例下面是一些使用this指针的常见用法示例:1.在构造函数中使用this指针:在构造函数中,可以使用this指针来访问对象的成员变量和成员函数。
例如:```cppclassMyClass{intx;public:MyClass(intvalue):x(value){}//使用this指针初始化成员变量x};```2.在析构函数中使用this指针:在析构函数中,可以使用this指针来释放对象的资源。
实验二-类与对象(二)实验三类与对象(2)【实验类型】验证性实验【实验课时】2学时【实验目的】(1)掌握对象数组定义与使用方法。
(2)理解对象指针的概念,学会用指针引用对象。
(3)了解this指针的工作方式。
(4)掌握静态数据成员和静态成员函数的基本使用方法。
(5)理解友元与友元函数的作用,掌握其使用方法。
【实验环境】硬件:计算机软件:Microsoft Visual C++ 6.0【实验内容】1、按要求阅读、修攺、调试和运行以下程序。
(1)实验内容① 定义一个类Stock,记录一支股票交易的基本信息,信息包括交易日序号(表示本月的第几个交易日,用整数表示)、当日最高价、当日最低价、当日开盘价和当日收盘价。
尽量发挥想象力,为该类设计成员函数。
② 在主函数中建立两个股票对象,分别存储该股票昨天和今天两天的信息,以当日收盘价计算该股票今天的涨幅。
③ 使用股票类Stock,定义一个对象数组存放连续5个交易日的股票信息。
编写一个主函数,计算两个Stock对象(前后两日)的当日收盘价计算当日涨幅。
用指针引用对象数组中的两个对象。
在主函数中调用该函数计算从第2个交易日开始每天的当日涨幅。
④ 在Stock类中定义一个静态数据成员,记录当前Stock对象的数量。
⑤ 设计一个成员函数Assign_stock为对象赋值,其中的形式参数是对另一个Stock对象的引用,使用this指针避免对自己的赋值,在主函数中显示用Assign_stock赋值的对象。
⑥ 定义一个友元函数计算Stock对象的当日开盘价是否高于当日收盘价。
若是,返回真,否则,返回假。
(2)实验程序及运行结果(参考)①以当日收盘价计算该股票今天的涨幅#include <iostream.h>class Stock{public:Stock(int n,double ma,double mi,double b,double e);void Set_Stock(int n,double ma,double mi,double b,double e);double Get_End();void Show_Stock();private:int Number;double Max,Min,Begin,End;};Stock::Stock(int n,double ma,double mi,double b,double e){ Number=n;Max=ma;Min=mi;Begin=b;End=e;}void Stock::Set_Stock(int n,double ma,double mi,double b,double e){ Number=n;Max=ma;Min=mi;Begin=b;End=e;}double Stock::Get_End(){ return End;}void Stock::Show_Stock(){ cout<<Number<<"\t";cout<<Max<<"\t";cout<<Min<<"\t";cout<<Begin<<"\t";cout<<End<<endl;}void main(){ Stocks1(1,4.18,4.00,4.05,4.09);Stocks2(2,4.41,4.03,4.04,4.40);cout<<"\n"<<(s2.Get_End()-s1.Get_E nd())/s1.Get_End()*100<<"%"<<endl;}②定义一个对象数组存放连续5个交易日的股票信息#include <iostream.h>const int N=2;class Stock{public:Stock(int n,double ma,double mi,double b,double e);Stock(); //增加无输入值的构造函数void Set_Stock(int n,double ma,double mi,double b,double e);void Set_Stock();double Get_End();void Show_Stock();private:int Number;double Max,Min,Begin,End;};Stock::Stock(int n,double ma,double mi,double b,double e){ Number=n;Max=ma;Min=mi;Begin=b;End=e;}Stock::Stock() //无输入值时,将其都清零{ Number=0;Max=0;Min=0;Begin=0;End=0;}void Stock::Set_Stock(int n,double ma,double mi,double b,double e){ Number=n;Max=ma;Min=mi;Begin=b;End=e;}double Stock::Get_End(){ return End;}void Stock::Show_Stock(){ cout<<Number<<"\t";cout<<Max<<"\t";cout<<Min<<"\t";cout<<Begin<<"\t";cout<<End<<endl;}void Stock::Set_Stock(){ cout<<"Number:";cin>>Number;cout<<"Max:";cin>>Max;cout<<"Min:";cin>>Min;cout<<"Begin:";cin>>Begin;cout<<"End:";cin>>End;}void main(){ int i;Stock s1[5],*p;for (i=0,p=s1;i<N;i++,p++)p->Set_Stock();for (i=0,p=s1;i<N;i++,p++)p->Show_Stock();for(i=1,p=s1+1;i<N;i++,p++) cout<<"\n"<<(p->Get_End()-(p-1)->Get_End())/(p-1)->Get_End()*100<<"%"<<en dl;}③定义一个静态数据成员,记录当前Stock 对象的数量#include <iostream.h>const int N=2;class Stock{public:Stock() {}Stock(int n,double ma,double mi,double b,double e);void Set_Stock(int n,double ma,double mi,double b,double e);void Set_Stock();double Get_End();void Show_Stock();int Get_N_count();private:static intN_count; //静态数据成员int Number;double Max,Min,Begin,End;};intStock::N_count=0; //此处定义时不需要加上staticStock::Stock() //无输入值时,将其都清零{N_count++;Number=0;Max=0;Min=0;Begin=0;End=0;}Stock::Stock(int n,double ma,double mi,double b,double e){ N_count++;Number=n;Max=ma;Min=mi;Begin=b;End=e;}void Stock::Set_Stock(int n,double ma,double mi,double b,double e){Number=n;Max=ma;Min=mi;Begin=b;End=e;}double Stock::Get_End() { return End;}void Stock::Show_Stock() { cout<<Number<<"\t";cout<<Max<<"\t";cout<<Min<<"\t";cout<<Begin<<"\t";cout<<End<<endl;} void Stock::Set_Stock() {cout<<"Number:";cin>>Number;cout<<"Max:";cin>>Max;cout<<"Min:";cin>>Min;cout<<"Begin:";cin>>Begin;cout<<"End:";cin>>End;}int Stock::Get_N_count(){ return N_count;}void main(){ int i;Stock s1[5];Stock *p;for (i=0,p=s1;i<N;i++,p++)p->Set_Stock();for (i=0,p=s1;i<N;i++,p++)p->Show_Stock();for(i=1,p=s1+1;i<N;i++,p++) cout<<"\n"<<(p->Get_End()-(p-1)->Get_E nd())/(p-1)->Get_End()*100<<" %";cout<<"\n"<<p->Get_N_count()<< endl;}④设计一个成员函数Assign_stock为对象赋值,其中的形式参数是对另一个Stock对象的引用#include <iostream.h>const int N=2;class Stock{public:Stock() {}Stock(int n,double ma,double mi,double b,double e);void Set_Stock(int n,double ma,double mi,double b,double e);void Set_Stock();void Assign_Stock(Stock& p);void Show_Stock();private:static int N_count;long Number;double Max,Min,Begin,End;};int Stock::N_count=0;Stock::Stock() //无输入值时,将其都清零{N_count++;Number=0;Max=0;Min=0;Begin=0;End=0;}Stock::Stock(int n,double ma,double mi,double b,double e){ N_count++;Number=n;Max=ma;Min=mi;Begin=b;End=e;}void Stock::Set_Stock(int n,double ma,double mi,double b,double e){ N_count++;Number=n;Max=ma;Min=mi;Begin=b;End=e;}void Stock::Assign_Stock(Stock& p){ if (this!=&p){Number=p. Number;Max=p.Max;Min=p.Min;Begin=p.Begin;End=p.End;}}void Stock::Show_Stock() { cout<<Number<<"\t";cout<<Max<<"\t";cout<<Min<<"\t";cout<<Begin<<"\t";cout<<End<<endl;} void Stock::Set_Stock() {cout<<"Number:";cin>>Number;cout<<"Max:";cin>>Max;cout<<"Min:";cin>>Min;cout<<"Begin:";cin>>Begin;cout<<"End:";cin>>End;}void main(){Stock s1(4,7.88,7.48,7.56,7.68);Stock s2;s2.Assign_Stock(s1);s2.Show_Stock();}⑤定义一个友元函数计算Stock对象的当日开盘价是否高于当日收盘价。
qt creator中this指针用法在Qt Creator中,"this"指针是一个指向当前对象的指针,它在C++中广泛使用。
在Qt Creator中,"this"指针的用法与在其他C++环境中类似。
下面是一些基本用法和例子:1. 成员函数中的使用:当你在类的成员函数中使用"this"指针时,它指向调用该成员函数的实例。
例如:```cppclass MyClass {public:void myFunction() {qDebug() << "This pointer is:" << this;}};```在这个例子中,`myFunction`是一个成员函数,当你调用这个函数的时候,"this"指针将指向调用这个函数的对象。
2. 重载操作符:在某些情况下,你可能需要重载操作符,如"->"。
在这些情况下,"this"指针可以用来区分重载的操作符和类的成员函数。
例如:```cppclass MyClass {public:MyClass operator->() {qDebug() << "This pointer in operator->: " << this;return this;}};```在这个例子中,"this"指针指向调用`operator->`的实例。
3. 动态分配对象:当你动态分配对象(即使用`new`关键字)时,"this"指针在构造函数中可用。
它指向新创建的对象。
例如:```cppclass MyClass {public:MyClass() {qDebug() << "This pointer in constructor: " << this;}};int main() {MyClass obj = new MyClass(); // This pointer will be printed here. delete obj;return 0;}```在这个例子中,"this"指针在`MyClass`的构造函数中被使用,它指向新创建的对象。