#pragma once
#include class vector3
double y(void) const
double z(void) const
double norm(void) const;
void normalize(void);
vector3 operator+(const vector3 &v) const;
vector3 operator-(const vector3 &v) const;
vector3 operator*(const double n) const;
vector3 operator/(const double n) const;
vector3 & operator=(const vector3 &v);
friend vector3 operator*(const double n, const vector3 &v);
friend std::ostream & operator<<(std::ostream &os, const vector3 &v);
~vector3();
};
#include #include "vector3.h"
vector3::vector3()
vector3::vector3(double x,double y,double z)
vector3::vector3(const vector3 &v)
void vector3::normalize(void)
double vector3::norm(void) const
vector3 vector3::operator+(const vector3 &v) const
vector3 vector3::operator-(const vector3 &v) const
vector3 vector3::operator*(const double n) const
vector3 vector3::operator/(const double n) const
vector3 & vector3::operator=(const vector3 &v)
vector3 operator*(const double n, const vector3 &v)
std::ostream & operator<<(std::ostream &os, const vector3 &v)
vector3::~vector3()
void main(void)
vector3 norm1(vector3 v)
vector3 norm2(vector3 &v)
vector3 & norm3(vector3 &v)
vector3 norm4(vector3 * &v)
calling norm1:copy constructor called
normalizition called
copy constructor called
destructor called
assignment operator called
destructor called
[ 0.267261 , 0.534522 , 0.801784 ]
assignment operator called
destructor called
calling norm2:
normalizition called
copy constructor called
assignment operator called
destructor called
[ 0.267261 , 0.534522 , 0.801784 ]
assignment operator called
destructor called
calling norm3:
normalizition called
assignment operator called
[ 0.267261 , 0.534522 , 0.801784 ]
calling norm4:
normalizition called
copy constructor called
assignment operator called
destructor called
[ 0.267261 , 0.534522 , 0.801784 ]
norm2函式傳遞引用型別,返回值型別。過程如下:norm3函式傳遞引用型別,返回引用型別。過程如下:
可以發現傳遞變數的引用+返回變數引用最省資源。c++引用的效率比c語言指標的效率高,有木有!不過呢,引用必須經過初始化才能使用,意味著傳遞和返回某變數的引用之前,該變數的位址已經確定。c語言中普遍傳遞指標,指標儲存著變數的位址,函式通過位址來訪問或修改原變數。其實,大部分情況下(下一段講例外)變數在棧中的位址在定義時就已經確定了,呼叫函式時可以根據棧頂指標推算出此變數的真實位址,也就沒必要傳遞該變數的位址了。
而new和malloc動態建立物件返回的是指標,此指標的位址固定,但指標儲存的物件的位址是不確定的,所以只能通過指標來傳遞此類物件。然後呢,既然指標的位址固定,也就可以傳遞這個指標的引用。如norm4函式。
C語言列舉的好處
列舉的好處 列舉是 c 語言中的一種基本資料型別,它可以讓資料更簡潔,更易讀。列舉語法定義格式為 enum 列舉名 接下來我們舉個例子,比如 一星期有 7 天,如果不用列舉,我們需要使用 define 來為每個整數定義乙個別名 define mon 1 define tue 2 define wed...
定義介面型別的引用變數有什麼好處
面向介面程式設計 1,在定義乙個引用變數時,心裡想的應該是 我在這裡需要乙個什麼樣的功能。我是因為需要什麼功能才建立變數的,介面定義了功能的集合!所以我應該是用介面來定義這個引用變數嘛!2,定義好了引用變數以後,要讓它引用乙個物件,這個物件就應該是實現了那個介面的類的例項了。隨便乙個類,只要它繼承實...
定義介面型別的引用變數有什麼好處
1,在定義乙個引用變數時,心裡想的應該是 我在這裡需要乙個什麼樣的功能,我是因為需要什麼功能才建立變數的 介面定義了功能的集合 所以我應該是用介面來定義這個引用變數嘛 2,定義好了引用變數以後,要讓它引用乙個物件,這個物件就應該是實現了那個介面的類的例項了 隨便乙個類,只要它繼承實現了那個介面,那麼...