青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 29,comments - 10,trackbacks - 0
1、operator long ()
      成員轉換函數把類的對象轉換為其他數據類型的對象。
      在表達式的內部,如果某個類型和需要的類型不一致,就會發生轉換。
 1 #include <iostream>
 2 
 3 class Date
 4 {
 5     int mo, da, yr;
 6 
 7 public:
 8     Date(int m, int d, int y) { mo = m; da = d; yr = y; }
 9     operator long();    // member conversion function.
10 };
11 
12 Date::operator long()
13 {
14     static int dys[]={31,28,31,30,31,30,31,31,30,31,30,31};
15     long days = yr - 1900;
16     days *= 365;
17     days += yr / 4;
18     for (int i = 0; i < mo-1; i++)
19         days += dys[i];
20     days += da;
21     
22     return days;
23 }
24 
25 int main()
26 {
27     Date xmas(12251997);
28     long since = xmas;
29     std::cout << since << std::endl;
30 
31     Date today(2121990);
32     const long ott = 123;
33     long sum = ott + today;   // today is converted to long.
34     std::cout << ott << " + " << (long) today << " = " << sum;
35     
36     return 0;
37 }
2、operator CustomDate()
      對類進行轉換
      調用轉換函數三種方法:一是隱式轉換,二是強制類型轉換,三是顯示調用轉換構造函數和成員轉換函數。分別為程序的64、68、72行
 1 #include <iostream>
 2 
 3 class CustomDate
 4 {
 5 public:
 6     int da, yr;
 7     CustomDate(int d = 0int y = 0) { da = d; yr = y;}
 8     void display(){ std::cout << std::endl
 9                               << yr << '-' << da; }
10 };
11 
12 class Date
13 {
14     int mo, da, yr;
15 
16 public:
17     // Constructor.
18     Date(int m = 0int d = 0int y = 0)
19         { mo = m; da = d; yr = y; }
20 
21     // Constructor conversion function.
22     Date(const CustomDate&);
23 
24     // Member conversion function.
25     operator CustomDate();
26 
27     void display(){std::cout << std::endl
28                              << mo << '/' << da
29                              << '/' << yr;}
30 };
31 
32 static int dys[] = {31,28,31,30,31,30,31,31,30,31,30,31};
33 
34 // Constructor conversion function (Date <- CustomDate).
35 Date::Date(const CustomDate& jd)
36 {
37     yr = jd.yr;
38     da = jd.da;
39     for (mo = 0; mo < 11; mo++)
40         if (da > dys[mo])
41             da -= dys[mo];
42         else
43             break;
44         mo++;
45 }
46 
47 // Member conversion function (CustomDate <- Date)
48 Date::operator CustomDate()
49 {
50     CustomDate cd(0, yr);
51     for (int i = 0; i < mo-1; i++)
52         cd.da += dys[i];
53     cd.da += da;
54     
55     return cd;
56 }
57 
58 int main()
59 {
60     Date dt(11,17,97);
61     CustomDate cd;
62     
63     // Convert Date to CustomDate. Convert Date to CustomDate via implicit conversion.
64     cd = dt;
65     cd.display();
66     
67     // Convert Date to CustomDate via cast.
68     cd = (CustomDate) dt;
69     cd.display();
70     
71     // Convert Date to CustomDate via constructor
72     cd = CustomDate(dt);
73     cd.display();
74     
75     // Convert CustomDate to Date
76     dt = cd;
77     dt.display();
78     
79     return 0;
80 }
3、重載賦值運算符函數(Date& operator=(const Date&);)
#include <iostream>
#include 
<cstring>

class Date
{
    
int mo, da, yr;
    
char *month;

public:
    Date(
int m = 0int d = 0int y = 0);
    
~Date();

    
// Overloaded assignment operator.
    Date& operator=(const Date&);

    
void display() const;
};

// The constructor definition.
Date::Date(int m, int d, int y)
{
    
static char *mos[] =
    {
        
"January""February""March""April""May",
        
"June""July""August""September""October",
        
"November""December"
    };

    mo 
= m; da = d; yr = y;
    
if (m != 0)
    {
        month 
= new char[strlen(mos[m-1])+1];
        strcpy(month, mos[m
-1]);
    }
    
else
        month 
= 0;
}

// The destructor definition.
Date::~Date()
{
    delete [] month;
}

// Display member function.
void Date::display() const
{
    
if (month != 0)
        std::cout 
<< month << ' ' << da
                  
<< "" << yr << std::endl;
}

// Overloaded Date assignment.
Date& Date::operator=(const Date& dt)
{
    
if (this != &dt)
    {
        mo 
= dt.mo;
        da 
= dt.da;
        yr 
= dt.yr;
        delete [] month;
        
if (dt.month != 0)
        {
            month 
= new char [strlen(dt.month)+1];
            strcpy(month, dt.month);
        }
        
else
            month 
= 0;
    }

    
return *this;
}

int main()
{
    
// Original date.
    Date birthday(6,24,40);
    
    Date oldday, newday;
    
    
// Assign first to second to third.
    oldday = newday = birthday;
    
    birthday.display();
    oldday.display();
    newday.display();
    
    
return 0;
}
      if (this != &dt)是為了防止同時對一個指針進行兩次刪除操作
4、在類內部重載new和delete運算符
      void* operator new(size_t) throw(std::bad_alloc)
      void operator delete(void* p) throw()

      可以重載全局new和delete運算符,但一般不這么做。不過采用重載可以獲得較高的效率,避免使用全局new和delete運算符帶來的額外開銷。
#include <iostream>
#include 
<cstring>
#include 
<cstddef>
#include 
<new>

const int maxnames = 5;

class Names
{
    
char name[25];
    
static char Names::pool[];
    
static bool Names::inuse[maxnames];

public:
    Names(
char* s)
        { strncpy(name, s, 
sizeof(name)); }
    
void* operator new(size_t) throw(std::bad_alloc);
    
void operator delete(void*throw();
    
void display() const
        { std::cout 
<< name << std::endl; }
};

// Simple memory pool to handle fixed number of Names.
char Names::pool[maxnames * sizeof(Names)];
bool Names::inuse[maxnames];

// Overloaded new operator for the Names class.
void* Names::operator new(size_t) throw(std::bad_alloc)
{
    
for (int p = 0; p < maxnames; p++)
    {
        
if (!inuse[p])
        {
            inuse[p] 
= true;
            
return pool+p*sizeof(Names);
        }
    }
    
throw std::bad_alloc();
}

// Overloaded delete operator for the Names class.
void Names::operator delete(void* p) throw()
{
    
if (p != 0)
        inuse[((
char*)p - pool) / sizeof(Names)] = false;
}

int main()
{
    Names
* nm[maxnames];
    
int i;

    
for (i = 0; i < maxnames; i++)
    {
        std::cout 
<< std::endl << "Enter name # "
                  
<< i+1 << "";
        
char name[25];
        std::cin 
>> name;
        nm[i] 
= new Names(name);
    }

    
for (i = 0; i < maxnames; i++)
    {
        nm[i]
->display();
        delete nm[i];
    }

    
return 0;
}
5、重載new[]和delete[]運算符
#include <iostream>
#include 
<cstring>
#include 
<cstddef>
#include 
<new>

const int maxnames = 5;

class Names
{
    
char name[25];
    
static char Names::pool[];
    
static short int Names::inuse[maxnames];

public:
    Names(
char* s = 0)
    {
        
if (s)
            strncpy(name, s, 
sizeof(name));
    }
    
void* operator new[](size_t) throw(std::bad_alloc);
    
void operator delete[](void*throw();
    
void display() const
        { std::cout 
<< name << std::endl; }
};

// Simple memory pool to handle fixed number of Names.
char Names::pool[maxnames * sizeof(Names)];
short int Names::inuse[maxnames];

// Overloaded new[] operator for the Names class.
void* Names::operator new[](size_t size) throw(std::bad_alloc)
{
    
int elements = size / sizeof(Names);

    
// Find the first empty element (if any).
    int p = -1;
    
int i = 0;
    
while ((i < maxnames) && (p == -1))
    {
        
if (!inuse[i])
            p 
= i;
        
++i;
    }

    
// Not enough room.
    if ((p == -1|| ((maxnames - p) < elements))
        
throw std::bad_alloc();

    
// Mark the elements as used.
    for (int x=0; x<elements; ++x)
        inuse[p
+x] = elements;

    
// Return pointer to memory.
    return pool+p*sizeof(Names);
}

// Overloaded delete[] operator for the Names class.
void Names::operator delete[](void* b) throw()
{
    
if (b != 0)
    {
        
int p = ((char*)b - pool) / sizeof(Names);
        
int elements = inuse[p];
        
for (int i = 0; i < elements; i++)
            inuse[p 
+ i] = 0;
    }
}

int main()
{
    Names
* np = new Names[maxnames];
    
    
int i;
    
for (i = 0; i < maxnames; i++)
    {
        std::cout 
<< std::endl << "Enter name # "
            
<< i+1 << "";
        
char name[25];
        std::cin 
>> name;
        
*(np + i) = name;
    }
    
    
for (i = 0; i < maxnames; i++)
        (np 
+ i)->display();
    
    delete [] np;
    
    
return 0;
}

6、重載+運算符
這里分別用了成員函數和非成員函數對“+”符號進行了重載
Date Date::operator+(int) const
Date operator+(int n, Date& dt)

#include <iostream>

class Date
{
    
int mo, da, yr;
    
static int dys[];

public:
    Date(
int m=0int d=0int y=0)
        { mo 
= m; da = d; yr = y; }
    
void display() const
        { std::cout 
<< mo << '/' << da << '/' << yr; }

    
// Overloaded + operator.
    Date operator+(intconst;
};

int Date::dys[]={31,28,31,30,31,30,31,31,30,31,30,31};

// Overloaded + operator: Date + int.
Date Date::operator+(int n) const
{
    Date dt 
= *this;
    n 
+= dt.da;
    
while (n > dys[dt.mo-1])
    {
        n 
-= dys[dt.mo-1];
        
if (++dt.mo == 13)
        {
            dt.mo 
= 1;
            dt.yr
++;
        }
    }
    dt.da 
= n;

    
return dt;
}

Date 
operator+(int n, Date& dt)
{
    
return dt + n;
}

int main()
{
    Date olddate(
2,20,1997);
    Date newdate;
    newdate 
= 11 + olddate + 10;  // three weeks hence
    newdate.display();

    
return 0;
}

7、重載關系運算符(“==”“< ”“+=”)
Date operator+=(int n)
int operator==(Date& dt) const
int operator<(Date&) const

#include <iostream>

class Date
{
    
int mo, da, yr;

public:
    Date(
int m=0int d=0int y=0)
        { mo 
= m; da = d; yr = y; }
    
void display() const
        { std::cout 
<< mo << '/' << da << '/' << yr; }
    
// Overloaded + operator.
    Date operator+(intconst;
    
    
// Overloaded += operator.
    Date operator+=(int n)
        { 
*this = *this + n; return *this; }

    
// Overloaded operators.
    int operator==(Date& dt) const;
    
int operator<(Date&const;
};

int dys[]={31,28,31,30,31,30,31,31,30,31,30,31};

// Overloaded + operator definition.
Date Date::operator+(int n) const
{
    Date dt 
= *this;
    n 
+= dt.da;
    
while (n > dys[dt.mo-1])
    {
        n 
-= dys[dt.mo-1];
        
if (++dt.mo == 13)
        {
            dt.mo 
= 1;
            dt.yr
++;
        }
    }
    dt.da 
= n;
    
    
return dt;
}

// Overloaded equality operator definition.
int Date::operator==(Date& dt) const
{
    
return (this->mo == dt.mo &&
            
this->da == dt.da &&
            
this->yr == dt.yr);
}

// Overloaded less-than operator definition.
int Date::operator<(Date& dt) const
{
    
if (this->yr == dt.yr)    {
        
if (this->mo == dt.mo)
            
return this->da < dt.da;
        
return this->mo < dt.mo;
    }
    
return this->yr < dt.yr;
}

int main()
{
    Date date1(
12,7,1941),
         date2(
2,22,1990),
         date3(
12,7,1941);

    Date olddate(
2,20,1997);
    olddate 
+= 21;            // three weeks hence
    olddate.display();
    std::cout
<<std::endl;

    
if (date1 < date2)
    {
        date1.display();
        std::cout 
<< " is less than ";
        date2.display();
    }

    std::cout 
<< '\n';
    
    
if (date1 == date3)
    {
        date1.display();
        std::cout 
<< " is equal to ";
        date3.display();
    }
    
    
return 0;
}
8、重載自增運算符(++)
Date operator++():重載++i
Date operator++(int):重載i++
#include <iostream>

class Date
{
    
int mo, da, yr;
    
static int dys[];

public:
    Date(
int m=0int d=0int y=0)
        { mo 
= m; da = d; yr = y; }
    
void display() const
        { std::cout 
<< '\n' << mo << '/' << da << '/' << yr;}

    
// Overloaded + operator.
    Date operator+(intconst;

    
// Overloaded prefix ++ operator.
    Date operator++()
        { 
*this = *this + 1return *this; }

    
// Overloaded postfix ++ operator.
    Date operator++(int)
        { Date dt
=*this*this=*this+1return dt; }
};

int Date::dys[]={31,28,31,30,31,30,31,31,30,31,30,31};

// Overloaded + operator definition.
Date Date::operator+(int n) const
{
    Date dt 
= *this;
    n 
+= dt.da;
    
while (n > dys[dt.mo-1])
    {
        n 
-= dys[dt.mo-1];
        
if (++dt.mo == 13)
        {
            dt.mo 
= 1;
            dt.yr
++;
        }
    }
    dt.da 
= n;

    
return dt;
}

int main()
{
    Date olddate(
2,20,1997);
    olddate
++;
    olddate.display();
    
++olddate;
    olddate.display();

    
return 0;
}
9、重載單目負運算符(-i)
int operator-() const
#include <iostream>
#include 
<cstring>

class ItemQty
{
    
int onhand;
    
char desc[25];

public:
    ItemQty(
int oh, char *d)
        { onhand 
= oh; strcpy(desc, d); }
    
void display() const
        { std::cout 
<< '\n' << desc <<"huhu"<<strlen(desc)<< "" << onhand; }

    
// Overloaded unary - operator.
    int operator-() const
        { 
return -onhand; }
};

int main()
{
    ItemQty item1(
100"crankshaft");
    ItemQty item2(
-50"driveshaft");

    item1.display();
    std::cout 
<< '\n' << -item1;    // invoke the overloaded -

    item2.display();
    std::cout 
<< '\n' << -item2;    // invoke the overloaded -

    
return 0;
}
10、重載下標運算符([])
 char& operator[](int n)
 const char& operator[](int n) const
      只有當所有的String類對象都是非常量的時候,才能用第一個重載[]運算符函數來得到字符串中的字符。為了支持常量String對象類中還設計了第二個重載[]運算符。
#include <iostream>
#include 
<cstring>

class String
{
    
char* sptr;

public:
    String(
char* s = 0);
    
~String() { delete sptr; }
    
void display()
        { std::cout 
<< sptr << std::endl; }

    
// Overloaded [] operator.
    char& operator[](int n)
        { 
return *(sptr + n); }
    
const char& operator[](int n) const
        { 
return *(sptr + n); }
};

// The String class constructor.
String::String(char* s)
{
    
if (s)
    {
        sptr 
= new char[strlen(s)+1];
        strcpy(sptr, s);
    }
    
else
        sptr 
= 0;
}

int main()
{
    String string1(
"The Ides of March");
    string1.display();
    
    
// Change some string characters.
    string1[4= '1';
    string1[
5= '5';
    string1[
6= 't';
    string1[
7= 'h';
    string1.display();
    
    
// Change a substring.
    strncpy(&string1[4], "21st"4);
    string1.display();
    
    
// const string, cannot be modified.
    const String string2("Et tu, Brute?");
    
for (int i = 0; i < 13; i++)
        std::cout 
<< string2[i];
    
    
return 0;
}
11、成員指針運算符(—>)
Date* operator->()
      為了防止由于疏忽,沒有把一個有效地Date對象的地址復制給指針,而使指針指向了無意義的地方,會導致程序崩潰。
      DatePtr對象是一個指針,它知道自身是否已經被賦值。即使沒有任何Date類對象的地址賦給指針,指針不會指向一個空的Date對象。
#include <iostream>

class Date
{
    
int mo, da, yr;

public:
    Date(
int m=0int d=0int y=0)
        { mo 
= m; da = d; yr = y; }
    
void display()
        { std::cout 
<< '\n' << mo << '/' << da << '/' << yr; }
};

class DatePtr
{
    Date
* dp;

public:
    DatePtr(Date
* d = 0) { dp = d; }
    Date
* operator->()
    {
        
static Date nulldate(0,0,0);
        
if (dp == 0)           // if the pointer is null
            return &nulldate;  // return the dummy address
        return dp;             // otherwise return the pointer
    }
};

int main()
{
    
// Date pointer with nothing in it.
    DatePtr dp;

    
// Use it to call display function.
    dp->display();

    Date dt(
3,17,90);

    
// Put address of date in pointer.
    dp = &dt;

    
// Display date through the pointer.
    dp->display();

    
return 0;
}
posted on 2009-06-22 20:31 The_Moment 閱讀(1013) 評論(0)  編輯 收藏 引用 所屬分類: C\C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜精品久久久久久久久久久久久 | 欧美激情黄色片| 亚洲精选久久| 亚洲国产欧美在线| 伊人成人在线视频| 激情丁香综合| 在线播放日韩欧美| 亚洲黄一区二区三区| 99精品欧美一区二区三区综合在线| 亚洲大片在线观看| 亚洲精品永久免费| 亚洲一区二区三区三| 亚洲欧美国产另类| 午夜久久电影网| 欧美成人精品在线观看| 亚洲精品久久久久久久久久久久久 | 欧美一区二区在线视频| 欧美有码在线观看视频| 久久精品91| 欧美另类久久久品| 国产精品青草久久| 亚洲国产成人在线| 亚洲综合精品四区| 亚洲黄网站在线观看| 欧美在线你懂的| 欧美福利一区二区| 狠狠干综合网| 香蕉国产精品偷在线观看不卡| 国产精品影音先锋| 亚洲另类视频| 欧美激情二区三区| 国产一区二区三区免费不卡| 国产精品一区2区| 国产精品美女主播在线观看纯欲| 欧美影院精品一区| 亚洲视频在线观看网站| 美女网站在线免费欧美精品| 亚洲人体偷拍| 国内成人精品2018免费看| 在线亚洲+欧美+日本专区| 午夜精品国产| 亚洲日本va午夜在线电影| 亚洲欧美在线一区二区| 欧美激情一区二区久久久| 国产精品亚洲欧美| 在线午夜精品| 亚洲高清三级视频| 欧美一区二区私人影院日本 | 欧美成人精品在线视频| 国产片一区二区| 亚洲在线中文字幕| 亚洲免费不卡| 欧美精品一区在线发布| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲综合成人婷婷小说| 欧美大片在线影院| 久久久噜噜噜久久| 在线国产日韩| 欧美成人综合一区| 久久亚洲色图| 在线欧美日韩精品| 欧美高清不卡在线| 欧美国产视频一区二区| 亚洲激情校园春色| 亚洲人线精品午夜| 欧美三级日本三级少妇99| 亚洲夜晚福利在线观看| 在线视频你懂得一区二区三区| 欧美日韩午夜剧场| 亚洲视频中文字幕| 亚洲第一区中文99精品| 久久视频在线看| 久久中文在线| 亚洲人成小说网站色在线| 亚洲激情自拍| 国产精品乱人伦一区二区| 欧美呦呦网站| 久久综合国产精品| 一二三区精品福利视频| 这里是久久伊人| 狠狠爱成人网| 亚洲国产成人精品视频| 欧美视频日韩视频在线观看| 新67194成人永久网站| 久久精品夜色噜噜亚洲aⅴ| 亚洲人成在线播放| 亚洲图中文字幕| 一区在线观看| 亚洲免费观看在线观看| 国产一区二区在线观看免费| 亚洲高清视频一区| 国产麻豆精品久久一二三| 欧美成人情趣视频| 国产精品www.| 蘑菇福利视频一区播放| 欧美三级免费| 免费一区视频| 国产精品日日摸夜夜添夜夜av| 久久嫩草精品久久久久| 欧美精品久久久久久久久久| 欧美一级在线播放| 欧美激情第3页| 久久亚洲精品一区二区| 欧美日韩一二区| 欧美激情在线播放| 国产一区二区观看| 一区二区av在线| 亚洲欧洲综合| 久久久999| 欧美亚洲视频一区二区| 欧美剧在线观看| 欧美jizzhd精品欧美巨大免费| 国产精品一区在线观看| 亚洲欧洲一区二区在线观看| 国模精品一区二区三区| 亚洲香蕉成视频在线观看| 亚洲七七久久综合桃花剧情介绍| 欧美一区二区在线| 亚洲一区二区四区| 欧美日韩1234| 欧美激情欧美狂野欧美精品 | 模特精品裸拍一区| 久久视频一区| 国产一区二区三区久久久久久久久| 一区二区三区三区在线| 99精品欧美一区| 欧美精品精品一区| 亚洲精品专区| 一本大道久久精品懂色aⅴ| 欧美成人第一页| 亚洲电影免费| 日韩一区二区精品葵司在线| 蜜桃久久精品一区二区| 欧美成人免费va影院高清| 在线视频观看日韩| 亚洲大片免费看| 亚洲第一精品久久忘忧草社区| 欧美一区二区私人影院日本| 久久黄色小说| 国内精品久久久久久久97牛牛| 午夜日韩视频| 久久三级福利| 亚洲国产精品精华液2区45| 免费久久99精品国产| 亚洲电影免费在线| 日韩亚洲欧美成人一区| 欧美人妖在线观看| 亚洲天堂av图片| 久久视频这里只有精品| 亚洲大片一区二区三区| 欧美成人免费小视频| 亚洲美女视频| 欧美一区二区三区免费观看视频 | 午夜久久电影网| 国产一区视频观看| 你懂的国产精品永久在线| 亚洲国产日韩欧美在线动漫| 亚洲免费观看| 国产精品夜色7777狼人| 久久黄色小说| 亚洲人成人一区二区在线观看 | 亚欧美中日韩视频| 在线观看视频欧美| 欧美精品在线观看一区二区| 在线视频日本亚洲性| 久久五月婷婷丁香社区| 亚洲久久成人| 国产欧美日本在线| 免费久久99精品国产自| 亚洲一区二区三区欧美| 久久综合亚州| 亚洲在线电影| 91久久极品少妇xxxxⅹ软件| 欧美日韩一区二| 久久精品91久久香蕉加勒比| 亚洲高清一区二区三区| 欧美在线免费| 亚洲免费电影在线观看| 国产亚洲午夜高清国产拍精品| 美女久久一区| 午夜久久电影网| 亚洲精品免费电影| 久久精品久久综合| 一本色道久久综合狠狠躁篇的优点| 国产亚洲欧美一区二区三区| 欧美激情久久久久久| 久久成年人视频| 亚洲夜晚福利在线观看| 亚洲电影av在线| 久久国产精品一区二区三区四区| 91久久在线视频| 国产一区二区三区免费不卡| 欧美视频在线观看 亚洲欧| 久久人人爽人人爽爽久久| 亚洲一区亚洲二区| 一本色道久久综合| 亚洲国产精品女人久久久| 麻豆久久婷婷| 久久久久99| 久久精品视频免费观看|