C++——继承时的this指针

1.this指针只在类的成员函数中使用,当类的成员函数需要用到自己的指针时就要用到this指针。但静态函数不能使用this关键字,其解释是:因为this是个引用,哪个对象调用方法就引用哪个对象。 而静态方法有可能不是被对象调用的,this无从引用,也就是:静态方法是属于整个类的,this指的是当前的对象。比如:
class ExamThis
{
int ShowThis() //定义一个显示自己指针的成员函数。
{
printf(“This is my this pointer %x \n“, this);
}
};

2.this的另一个用途是调用当前对象的另一个构造函数 ;

3.在你的方法中的某个形参名与当前对象的某个成员有相同的名字,这时为了不至于混淆,你便需要明确使用this关键字来指明你要使用某个成员,使用方法是 “this.成员名” ,而不带this的那个便是形参。

4.this后加参数则调用的是当前类具有相同参数的构造函数
class Person{
public static void prt(String s){
System.out.println(s);
}
Person(){
prt(A Person.);
}
Person(String name){
prt(A person name is+name);
}
}
public class Chinese extends Person{
Chinese(){
super(); //调用父类构造函数(1)
prt(A chinese.); //(4)
}
Chinese(String name){
super(name); //调用父类具有相同形参的构造函数(2)
prt(his name is+name);
}
Chinese(String name,int age){
this(name); //调用当前类具有相同形参的构造函数(3)
prt(his age is+age);
}
public static void main(String[] args){
Chinese cn=new Chinese();
cn=new Chinese(kevin);
cn=new Chinese(kevin,22);
}
}

在构造函数中this用于限定被相同的名称隐藏的成员,例如:
class Employee{
public Employee(string name, string alias) {
this.name = name;
this.alias = alias;
}
}

将对象作为参数传递到其他方法时也要用this表达,例如:
CalcTax(this);

声明索引器时this更是不可或缺,例如:
public int this [int param]{
get { return array[param]; }
set { array[param] = value; }
}

static 静态方法 用法:
   通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法。因为this是个引用,哪个对象调用方法就引用哪个对象。 静态方法是属于整个类的,this指的是对当前的对象d的引用。如下所示:
class Simple{
static void go(){
System.out.println(Go...);
}
}
public class Cal{
public static void main(String[] args){
Simple.go();
}
}
  调用一个静态方法就是“类名.方法名”,静态方法的使用很简单如上所示。一般来说,静态方法常常为应用程序中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。

时间: 2024-10-27 14:22:13

C++——继承时的this指针的相关文章

关于继承时子类重写父类方法和覆盖父类变量的若干问题

假设,子类重载父类的方法,并将子类的成员覆盖. 创建子类对象实例,将其上转型成父类. 例子1 public class Parent { public void init() { System.out.println("1 init parent"); this.demo(); } public void demo() { System.out.println("2 demo parent"); } } public class Son extends Parent

C++的继承操作---基类指针访问派生类问题---基类成员恢复访问属性问题

#include "stdafx.h" #include <iostream> #include <algorithm> using namespace std; class Base { public: int num; virtual void func() { cout<<"Do something in Base"<<endl; } }; class Derived:private Base { public:

方法和变量在继承时的覆盖和隐藏问题

作者:华清远见讲师 最近有个同学问了我一个小问题,觉得很有意思,之前一直没有想到过.他说"java中存在方法覆盖,是否存在变量的覆盖呢?".我们知道,在java中,子类可以继承父类,如果子类声明的方法与父类有重名,这时就发生了方法覆盖.其实,这实际上这又分为两种情况,就是方法和变量在继承时的覆盖和隐藏问题,这些概念性的东西看似无聊,但是在面试中还是比较常见的,所以这里来讨论下 首先我们来看几个概念 隐藏 :子类隐藏了父类的变量和方法,那么,子类不能访问父类被隐藏的变量或者方法,但是,将

从Qt谈到C++(二):继承时的含参基类与初始化列表

提出疑问 当我们新建一个Qt的图形界面的工程时,我们可以看看它自动生成的框架代码,比如我们的主窗口名称为MainWindow,我们来看看mainwindow.cpp文件: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { } 不同于一般的继承,这里的父类的括号里带有参数,我们通常都使用过不带参数,甚至不带括号的基类名称.这里的基类为什么带着参数呢? C++继承与构造函数

JAVA中继承时方法的重载(overload)与重写/覆写(override)

JAVA继承时方法的重载(overload)与重写/覆写(override) 重载-Override 函数的方法参数个数或类型不一致,称为方法的重载. 从含义上说,只要求参数的个数或参数的类型不一致就说两个函数是重载函数,而至于返回值是否一样,没关系.同时,重载可以发生在同一个类中也可以发生在继承关系中. class A { } class B extends A { public void fun(String data1) { System.out.println(data1); } pub

JAVA继承时this和super关键字

JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父类中查找. class A { public void fun() { System.out.println("父类的fun()"); } } class B extends A { public void test() { this.fun(); } public void fun()

链表操作时巧用指针的指针

比如在插入有序链表的过程中,一般情况下要使用俩指针来遍历,而后还要判断是否在第一个位置插入:利用指针的指针后不需要另外考虑这种特殊情况. 代码: #include <stdio.h> #include <stdlib.h> struct node{ int data; struct node *next; } *head; //sorted link-list void insert(struct node *new_node){ struct node *cur = head,

方法和变量在继承时的覆盖和隐藏

package com.jdk7.chapter2.converhide; public class Parent { public static String kind = "com.jdk7.chapter2.Parent"; //类变量 public static int age = 100; //类变量 public String name = "Parent"; //实例变量 public static String getKind() { //静态方法

截图时如何显示鼠标指针,如何带鼠标指针截图,带鼠标指针截图的方法,怎么在截图时把鼠标指针一起截上

截图时如何显示鼠标指针,如何带鼠标指针截图,带鼠标指针截图的方法,怎么在截图时把鼠标指针一起截上 可以借助截图软件来实现, FSCapture(全称FastStone Capture),可是实现截图是带着鼠标指针 HprSnap.可是实现截图是带着鼠标指针 原文地址:https://www.cnblogs.com/GaoNa/p/12304366.html