CC++静态类和this指针详解及实例代码

CC++静态类和this指针详解及实例代码,第1张

概述 C/C++静态类和this指针详解1、静态类C++的静态成员不仅可以通过对象来访问,还可以直接通过类名来访问。

 C/C++静态类和this指针详解

1、静态类

C++的静态成员不仅可以通过对象来访问,还可以直接通过类名来访问。

class CBook{public:  static double price;//需要通过类外来进行初始化}int main(voID){  CBook book;  book.price;//通过对象来访问  CBook::price//通过类名来访问  return 0;}

静态成员变量

对应静态成员有以下几点需要注意:

(1)静态数据成员可以是当前类的类型,而其他数据成员只能是当前类的指针或应用类型。

class CBook{public:  static double price;  CBook book;//非法定义,不允许在该类中定义所属类的对象  static CBook m_book;//正确  CBook *book;//正确};

(2)静态数据成员可以作为其他成员函数的默认参数(不同的数据类型不能作为参数)。

class CBook{public:  int pages;  static double price;  //定义一个函数,以静态数据作为默认参数  voID outPutInfo(int data = price){    //实现  }  //错误定义,普通数据不能作为默认参数  voID outPutPage(int data = pages){    //实现  }};

静态函数

static voID outPut();

(1)类的静态成员函数只能访问静态数据成员,不能访问普通数据成员(因为没有this指针)。

(2)静态成员函数不能定义为const成员函数(即静态成员函数末尾不能加上const关键字)

static voID outPut() const;//错误定义

(3)在定义静态成员函数时,如果函数的实现位于类体外,则在函数的实现部分不能再标识static关键字。

//错误的定义static voID CBook::outPutInfo(){  //实现}

关于静态类我们在总结一下:

(1)类的静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致 了它仅能访问类的静态数据和静态成员函数。

(2)不能将静态成员函数定义为虚函数。

2、this

C++

class CBook{public:  int pages;  voID outputPages(){    cout<<pages<<endl;  }};int main(){  CBook book1,book2;  book1.pages = 10;  book2.pages = 20;  book1.outputPages();  book2.outputPages();  return 0;}

book1和book2两个对象都有自己的数据成员pages,在调用outputPages时均输出自己的成员数据,那二者是如何区分的呢?答案是this指针。

在每个类的成员函数(非静态成员函数)都隐含一个this指针,指向被调用对象的指针,其类型为当前类的指针类型。

所以类似于上面的outputPages()方法,编译器将其解释为:

//函数调用book1.outputPages(&book1);//函数实现voID outputPages(CBook *this){//隐含的this指针  cout<<this->pages<<endl;//使用this指针访问数据成员}

Java

/** * 本示例为了说明this的三种用法! */package test;public class ThisTest {  private int i=0;  ThisTest(int i){    //(1)this.i表示成员变量i,i表示参数    this.i=i+1;  }  ThisTest(String s){    System.out.println("String constructor: "+s);  }  ThisTest(int i,String s){    //(2)this调用第二个构造器    this(s);    this.i=i++;  }  public ThisTest increment(){    this.i++;    //(3)返回的是当前的对象    return this;  }  public static voID main(String[] args){    ThisTest tt0=new ThisTest(10);    ThisTest tt1=new ThisTest("ok");    ThisTest tt2=new ThisTest(20,"ok again!");    System.out.println(tt0.increment().increment().increment().i);  }}

这里说明一下,this表示当前对象的引用,另this不能用在static方法中,这也就是为什么在静态函数无法调用成员变量的原因了。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

总结

以上是内存溢出为你收集整理的C/C++静态类和this指针详解及实例代码全部内容,希望文章能够帮你解决C/C++静态类和this指针详解及实例代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1245395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存