頁:
[1]
C++物件導向的一些問題
看了書之後還是不太懂1.請問什麼是inline函式?用inline有什麼好處?
2.this指標到底能幹麻
竟然是指向自己
那為什麼不寫出自己的變數名子就好了?<div></div> 本帖最後由 GravitationX 於 2011-9-3 02:40 PM 編輯
回復 1# immortal8305
1. inline類似MACRO(巨集),但又不是完全一樣,舉個例子比較清楚:
#include <iostream>
inline int add(int a, int b)
{
return a+b;
}
int main()
{
int a = 3, b = 4;
std::cout << add(a, b);
}如果編譯器採納add函式成為inline,那麼在主程式裡面的add函式將被展開。
函式展開的好處是可以稍微增加效率,減少呼叫函式的成本。缺點是會增加程式的大小。
注意!不是每一個函式都能被編譯器採納成為inline function。
2. this的用途主要是防止遮蔽問題,看個例子比較清楚:class SimpleComplex
{
public:
SimpleComplex() : real(0), imaginary(0) {}
void SetComplex(double real, double imaginary)
{
SetReal(real);
SetImaginary(imaginary);
}
void SetReal(double real)
{
this.real = real;
}
double GetReal() { return real; }
void SetImaginary(double imaginary)
{
this.imaginary = imaginary;
}
double GetImaginary() { return imaginary; }
private:
double real;
double imaginary;
};在setter很明顯會有遮蔽問題,參數列會遮蔽class本身的member,不用this的話會出問題。
method也可能會有遮蔽問題。...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 本帖最後由 iseeyou 於 2011-9-5 10:02 AM 編輯
this 主要不是為了遮蔽問題. 且你的用法也寫錯. 既然他叫指標當然是要寫成
this->imaginary=imaginary;
遮蔽問題可改變參數名稱. 可是下面的問題, 沒this 真的無法辦到
this 主要目地真的是為了參考到自己. 什麼時後會用到.
如把自己傳給令一個function 使用. 這時沒this 指標跟本不可能達到.
或是把自己回傳給別人用. C++ 中復寫 operator=() 就會用到this 指標回傳自己
或是把自己設給另一個變數也要用到this
example
class A;
void AddTen(A& a);
class A
{
public:
int i;
void Fn()
{
// 透過AddTen 把 i +10
AddTen(*this); // 沒有this 指標下.. 怎麼把自己傳給別人
}
};
void AddTen(A& a)
{
a.i+=10;
}
operator = 的例子
class A
{
public:
A() : q(new int) , s(100) {}
A(const A& r) : q(new int),s(r) { }
~A() { delete [] q; }
A& operator=(const A& r)
{
delete [] q;
s= r.s;
q=new int;
return *this; // 沒有this 指標, 怎麼把自己回傳
}
private :
int s;
int *q;
};
把自己設給某個變數的利子
class SimpleComplex
{
public:
SimpleComplex operator+(const SimpleComplex& r) const
{
SimpleComplex t;
t=*this; // 把自己設給某個變數
t.real+=r.real
t.imaginary+=r.imaginary;
return t;
}
private:
double real;
dobule imaginary;
};
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 我來加幾句自己的意見:
"自己" 這個問題要在有使用物件導向的情況下討論才有意義。
當你用class作出多數的instance (物件) 的時候,每個物件都有自己的
attribute (資料)。平常的函數寫法,在不使用 this 的情況下,對自我
的資料是不了解的。
換句話說,在沒有用 this 的情況下,有用物件導向跟沒有用物件導向,
其實是一樣的,因為函數在沒有指定pointer (指定對像)的情況下,並
無法讀寫物件自己的資料,所以才會說都是一樣的。
講到底,this 是物件導向的基石之一,主要是用來指定 "自己這個" 物件
的位址,好方便自己或其他物件 讀寫 "自己這個"物件的資料。
例子就不放了,上面的例子我想應該是夠了...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
頁:
[1]