类指针

 2023-05-25 11:39:20  阅读 0

在C++中,类也可以通过动态内存分配的方式来使用,如下:

 

#include <iostream>
​
class Animal{
public:
    virtual void show(){
        std::cout << "animal" << std::endl; 
    }
};
​
class Tiger :public Animal{
public:
    void show() override{
        std::cout << "tiger" << std::endl;
    }
};
​
int main(){
    Animal* animal = new Animal;
    Tiger* tiger = new Tiger;
​
    animal->show();
    tiger->show();
​
    delete animal;
    delete tiger;
​
    system("pause");
    return 0;
}

 

 

在上面的代码中,通过动态内存分配的方式来分别调用父类和子类中的函数方法。

 

这些都只是普通的指针的使用,对于子类和父类还可以通过一种方法实现函数的调用,即父类指针指向子类的内存。如下:

 

#include <iostream>
​
class Animal{
public:
    virtual void show(){
        std::cout << "animal" << std::endl; 
    }
};
​
class Tiger :public Animal{
public:
    void show() override{
        std::cout << "tiger" << std::endl;
    }
};
​
int main(){
    Animal* animal = new Animal;
    Animal* tiger = new Tiger;
​
    animal->show();
    tiger->show();
​
    delete animal;
    delete tiger;
​
    system("pause");
    return 0;
}

 

 

在此段代码中,我们用一个Animal类的指针来指向一块子类Tiger的地址。此时,调用tiger中的函数调用的则是Tiger类中的函数,而不是父类Animal中的了。

 

同样的道理,可以通过直接分配的方式来使用,那么,也可以通过指向其他变量的方法使用,如下:

 

int main(){
    Animal animal;
    Tiger tiger;
    animal.show();
    tiger.show();
​
    Animal* an = nullptr;
    an = &animal;
    an->show();
    an = &tiger;
    an->show();
​
    system("pause");
    return 0;
}

 

将主函数中的内容进行修改,创建一个父类指针,父类指针指向何种类型,就会调用何种类中的方法。

 

 

同样的道理,对于引用也是如此。但是,引用的对象是在一开始就已经确认的,后期是无法修改引用的对象的,这是引用和指针的不同之处,需要注意。但是对于函数传参来说则没有这么多显示,因为传参的对象是在一开始就已经决定好了的,后面基本不会再做修改。使用者在使用时可以酌情考虑进行使用。

标签:

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码