天天看點

c++ 浙大翁恺老師 面向對象程式設計聽課筆記收錄(七)(八)成員變量與成員變量的秘密

(七)

本地變量 Local variable

成員變量

在一個函數裡面定義了一個重名的本地變量,是以在這個成員函數裡本地變量優先。

成員變量的作用域::是類,在類的成員函數裡面使用,類聲明裡的成員變量也屬于聲明,而不是定義。

而本地變量隻能在定義那個的成員函數裡面

(如果你在成員函數裡面使用某個成員變量, 不要把成員變量作為形參,直接使用即可)

如果你在頭檔案裡面聲明了一個全局變量,比如 extern int g; 你再在某個源檔案 比如 hello.cpp 裡面去 include 了它,并且要使用全局變量 g 的話,你必須在 hello.cpp 裡面再定義 g,也就是 int g;

而對于類的非靜态成員變量,我們不需要搞成這樣: int A::i; 而且這也是錯誤的。 那麼成員變量 i 我們怎麼定義呢? 我們在執行個體化對象的時候就定義了成員變量了!

是以,成員變量不在類裡面,而是在類的不同實體對象裡面,當你有了實體對象,你才有了實體的 成員變量。

(八)

parameters(參數),local variables(本地變量)

放在堆棧裡。

fileds (字段)

聲明變量,(不知在記憶體哪裡)

成員變量,成員函數

==類不擁有i,類是虛的,隻有對象(eg:a)擁有i==;

==函數是屬于類的==;(是以成員函數f()在使用成員變量i時,其實是使用this->i,i與對象挂鈎了,但在成員函數中直接用了i)

調用a.f();

調用的是A的函數。

c++ 浙大翁恺老師 面向對象程式設計聽課筆記收錄(七)(八)成員變量與成員變量的秘密

#include<iostream>

using namespace std;

class myClass

{

public:

int i=20;

void f();

};

void myClass::f()

{

i++;

cout<<i<<endl;

cout<<"this ->"<<this<<endl;

}

int main()

{

myClass a,aa;

a.i=20;

cout<<a.i<<endl;

a.f();

cout<<a.i<<endl;

cout<<aa.i<<endl;

aa.f();

cout<<"&a = "<<&a<<endl;

cout<<"&aa = "<<&aa<<endl;

}

輸出結果:20 21 this->0xffff(某位址)

21 20 this->0xfffe(另一個位址)

&a = 0xffff

&aa = 0xfffe

證明i是對象擁有的,a.i變為21後,aa.i的初始值仍為20;

以及this所指向的位址與變量有關;

筆記來源:

網易雲課堂

https://study.163.com/note/noteIndex.htm?id=271005&type=0#/noteIndex?resType=0&resId=381171&sortType=0