您的位置:程序门 -> c/c++ -> c++ 语言



c++ 多态的 问题..请高手指点一下..多谢..


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


c++ 多态的 问题..请高手指点一下..多谢..
发表于:2007-08-31 15:08:52 楼主
#include   <iostream>  

class   vehicle    
{        
public:      
vehicle(float   speed,int   total):    
{    
vehicle::speed=speed;     //搞不懂这里为什么要加上vehicle::
vehicle::total=total;       //搞不懂这里为什么要加上vehicle::
}    
virtual   void   showmember()    
{    
cout < <speed < < " ¦ " < <total < <endl;    
}    
virtual   ~vehicle()    
{    
cout < < "载入vehicle基类析构函数 " < <endl;    
cin.get();    
}    
protected:        
float   speed;    
int   total;    
};        
class   car:public   vehicle        
{        
public:        
car(int   aird,float   speed,int   total):   vehicle(speed,total)
{        
car::aird=aird;     //搞不懂这里为什么要加上car::      
}    
virtual   void   showmember()    
{    
cout < <speed < < " ¦ " < <total < < " ¦ " < <aird < <endl;    
}    
virtual   ~car()    
{    
cout < < "载入car派生类析构函数 " < <endl;    
cin.get();    
}    
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();    
}

如果把里面的**::输出的东东就会有错...谢谢高手指点...
发表于:2007-08-31 15:12:591楼 得分:0
vehicle::speed指明是vehicle的成员变量speed,而不是函数参数里的speed。
发表于:2007-08-31 15:26:072楼 得分:0
这算不上多态问题,是作用域问题。

比如这个函数:
vehicle(float   speed,int   total):   //参数speed与类成员speed同名,屏蔽了类的成员speed。
{    
        vehicle::speed=speed;     //类成员speed被同名形参屏蔽,所以需要限定符来显示指定。    
        vehicle::total=total;      
}
发表于:2007-08-31 15:27:203楼 得分:0
去看看书上关于类的作用域以及成员函数参数匹配等问题。
发表于:2007-08-31 15:27:244楼 得分:0
多谢两位老大...我明白了...
发表于:2007-08-31 15:33:385楼 得分:0
函数参数和成员变量同名嘛。
改一下名字就不用加**::
发表于:2007-08-31 16:40:216楼 得分:0
主要是为了区分两个不同的变量,也可以用this来替代


快速检索

最新资讯
热门点击