当前位置:编程学习 > C/C++ >>

虚表与虚指针

网上各种关于这个的文章,但是我却找了很久才找到我想要的东西,小小的总结一下。因为我心中一直有个疑问:虚表存在什么地方,是类还是对象里面?虚指针又存在什么地方,是类还是对象?锲而不舍终于在第一篇文章找到我想要的东西。

1.c++类中的重载

 看看下面的代码:


[html]
#include <iostream>      
using namespace std;    
    
class Vehicle 
{    
public:    
     Vehicle(float speed,int total) 
     { 
         Vehicle::speed=speed; 
         Vehicle::total=total; 
     } 
    void ShowMember() 
     { 
       cout<<speed<<"|"<<total<<endl; 
     } 
protected:    
    float speed; 
    int total; 
};    
class Car:public Vehicle    
{    
public:    
     Car(int aird,float speed,inttotal):Vehicle(speed,total)    
     {    
         Car::aird=aird;    
     } 
  void ShowMember() 
     { 
       cout<<speed<<"|"<<total<<"|"<<aird<<endl; 
     } 
protected:    
    int aird; 
};    
  
void main()    
{    
     Vehicle a(120,4); 
     a.ShowMember(); 
     Car b(180,110,4); 
     b.ShowMember(); 
    cin.get(); 

#include <iostream>    
using namespace std;  
  
class Vehicle
{  
public:  
     Vehicle(float speed,int total)
     {
         Vehicle::speed=speed;
         Vehicle::total=total;
     }
    void ShowMember()
     {
       cout<<speed<<"|"<<total<<endl;
     }
protected:  
    float speed;
    int total;
};  
class Car:public Vehicle  
{  
public:  
     Car(int aird,float speed,inttotal):Vehicle(speed,total)  
     {  
         Car::aird=aird;  
     }
  void ShowMember()
     {
       cout<<speed<<"|"<<total<<"|"<<aird<<endl;
     }
protected:  
    int aird;
};  
 
void main()  
{  
     Vehicle a(120,4);
     a.ShowMember();
     Car b(180,110,4);
     b.ShowMember();
    cin.get();
}   在c++中是允许派生类重载基类成员函数的,对于不同类的对象,调用其类的成员函数的时候,系统是知道如何找到其类的同名成员。上面代码中的a.ShowMember()调用的是Vehicle::ShowMember(),而b.ShowMember()调用的是


[html]
Car::ShowMemeber()。 
#include <iostream>      
using namespace std;    
    
class Vehicle 
{    
public:    
     Vehicle(float speed,int total) 
     { 
         Vehicle::speed=speed; 
         Vehicle::total=total; 
     } 
    void ShowMember() 
     { 
       cout<<speed<<"|"<<total<<endl; 
     } 
protected:    
    float speed; 
    int total; 
};    
class Car:public Vehicle    
{    
public:    
     Car(int aird,float speed,inttotal):Vehicle(speed,total)    
     {    
         Car::aird=aird;    
     } 
    void ShowMember() 
     { 
        cout<<speed<<"|"<<total<<"|"<<aird<<endl; 
     } 
protected:    
    int aird; 
};    
  
void test(Vehicle &temp) 

     temp.ShowMember(); 

  
void main()    

     Vehicle a(120,4); 
     Car b(180,110,4); 
     test(a); 
     test(b); 
     cin.get(); 

Car::ShowMemeber()。
#include <iostream>    
using namespace std;  
  
class Vehicle
{  
public:  
     Vehicle(float speed,int total)
     {
         Vehicle::speed=speed;
         Vehicle::total=total;
     }
    void ShowMember()
     {
       cout<<speed<<"|"<<total<<endl;
     }
protected:  
    float speed;
    int total;
};  
class Car:public Vehicle  
{  
public:  
     Car(int aird,float speed,inttotal):Vehicle(speed,total)  
     {  
         Car::aird=aird;  
     }
    void ShowMember()
     {
  

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,