Cocos2dx之C++基礎(四)

weixin_33806914發表於2017-10-18

函式過載
函式不以返回值來區分過載函式
函式不以引數名來區分過載函式
使用過載函式的時候不要引起二義性
結構函式也可以過載
函式過載又叫編譯時多型

int square(int x)
{
    cout<<__FILE__<<__func__<<__LINE__<<endl;
    
    return x*x;
}

float square(float x)
{
    cout<<__FILE__<<__FUNCTION__<<__LINE__<<endl;
    
    return x*x;
}

double square(double x)
{
    cout<<__FILE__<<__func__<<__LINE__<<endl;
    
    return x*x;
}

多型:執行時多型
定義一個基類的指標,指向子類的變數

class Shape {
protected:
    int width, height;
    
public:
    Shape( int a=0, int b=0)
    {
        width = a;
        height = b;
    }
    
//  虛擬函式
    virtual int area()
    {
        cout << "Parent class area :" <<endl;
        return 0;
    }

//    virtual int area() = 0;
//   純 虛擬函式  = 0 告訴編譯器 沒有主題  因為實現多型 一般不需要實現父類中的虛擬函式
};


class Rectange : public Shape{
public:
    Rectange (int a = 0, int b= 0) : Shape(a, b){
        
    }
    
    int area(){
        cout << "Rectangle class area :" <<endl;
        return (width * height);
    }
};


class Triangle : public Shape{
public:
    Triangle (int a = 0, int b= 0):Shape(a, b){
        
    }
    
    int area(){
        cout << "Triangle class area :" <<endl;
        return (width * height);
    }
};

// 使用
    Shape *shape;
    
    Rectange rec(10, 7);
    Triangle tri(20, 8);
    
    
    //  儲存正方形的 地址
    // 呼叫的是 矩形的求面積公式
    shape = &rec;
    shape->area();
    
    
    // 呼叫的三角形的求面積方法
    shape = &tri;
    shape->area();

// 如果基類中沒有用virtual修飾, 那麼 呼叫的就是基類中的 area方法了

相關文章