Geekband Week aの最初の週の作業で発生した問題

1577 ワード

Geekband Week aの最初の週の作業で発生した問題1
     C++,               。       ,        。

今週の作業で発生した問題:
1.メンバー関数とパラメトリックインライン関数の混同:
class date
{
public:
    date (int y = 0,int m = 0, int d = 0) 
    : year(y) , month(m) , day(d)
    { }
    int get_year() const {return year;}
private:
    int year , month , day;
};

inline int
get_year(const date& x)
{
    return x.get_year();
 } 
 

上記のセクションのようにdateクラスを定義するとclassbody内でget_が定義されますyear()関数は、最初にオペレータ'>'関数内でget_を直接参照しました.year()関数は、エラーを発生させます.メンバー関数にthis型ポインタとメンバー関数を持つ呼び出し方法を明確にした後、class bodyの外でインライン関数get_を定義した.year(date&x)は、クラスdateの参照をパラメータとし、役割ドメインが全域である.
2.thisポインタがパラメータとしてクラスのdataにアクセスする方法:
メンバー関数にthisポインタパラメータを持参し、その関数を呼び出すクラス自体を指す以上、dataへのアクセス方法は次の2つのアクセス方法のうち、どちらが速いですか?
inline bool
date::operator > (const date& x)
{
    int i = 0;
    if (year > x.year)
    // 1、    data,  class body          
        i = 1;
    else if((this->year == x.year) && (this->get_month() > x.month))
        i = 1;    // 2、this    data
    else if((this->year == x.year)&& this->get_month() == x.month&&(this->get_day() > x.day))
        i = 1;
    return i;
}

3.classbody以外で定数メンバー関数を定義する方法:関数宣言後、セミコロン前にconstを付ける
class date
{
public:
    date (int y = 0,int m = 0, int d = 0) : year(y) , month(m) , day(d)
    { }
    int get_year()const;
private:
    int year , month , day;
};

inline int
date::get_year()const
{
    return year;//get_year();
 }