1. c++中,類的普通成員函數通過this指針訪問普通成員變數,那訪問靜態成員變數時是怎麼實現的
靜態成員變數的位置是確定的,不要對象就可以直接訪問。
比如下面代碼的兩種引用方法是等價的:
classTest{
public:
staticintms_Data;
};
intmain(){
Testt;
std::cout<<t.ms_Data<<std::endl;
std::cout<<Test::ms_Data<<std::endl;
}
2. 靜態成員的訪問格式是什麼麻煩舉個例子,謝謝
靜態成員在類中可以分為靜態成員函數和靜態成員變數。
訪問時有兩種訪問方式,使用類名加作用域分辨符加成員名,此其一;也可以使用對象名.成員名訪問。如:
classA
{
public:
staticvoidTest()
{
}
public:
staticinta;
};
intA:a=0;
intmain()
{
A::Test();//正確
A::a=100;//正確
Aa;
a.Test();//正確
a.a=100;//正確
A*p=&a;
p->Test();//正確
p->a=100;//正確
return0;
}
要注意的是,在訪問時,還是需要遵守訪問許可權(private/protected/public)的規則。
3. 靜態成員變數(或稱類變數)是通過____來訪問的
可用的訪問方式
1、類名::靜態成員變數,這個是最通用的方式
2、類對象.靜態成員變數
4. C++類中靜態對象成員的訪問!
類其實是個模型。
而對象就是找個這個模型製作的實體。
比如,類是造車的圖紙,對象就是找個圖紙造出的汽車。
類的成員是分級別的:protect,public,private。
在類內部定義的函數可以訪問任何一個變數,或者調用任何的類內部的函數,但是,如果被定義成private的話,對象是不能調用的,也就是對象只能調用定義為public的數據,如果你確實需要調用某個private的變數,你可以定義一個public的函數來返回這個變數,比如:
class
d
{
private:
int
a;
public:
int
getint(){return
a;}
......
}
這里你的對象不能調用a的,
也就是不能
int
b;
d
d;//假設已經寫好了構造函數
b=d.a;//這是錯誤的,
但是你可以
b=d.getint();
這樣就可以把a的值給b了。
所有的public的函數都可以通過
<對象>.<函數名>
的方式來調用
5. PHP面向對象練習題 1、訪問靜態成員變數時,可以使用: A、類名 B、self C、this D、parent 2、下面敘述正
self吧。
6. 訪問類的靜態成員變數的時候出現undefined reference to
靜態成員變數需要在類體外定義,類體里的只算是聲明:看如下的修改:
#include<iostream>
usingnamespacestd;
classCSingleton{
//其他成員
public:
staticCSingleton*GetInstance();
intage;
private:
CSingleton(){};
staticCSingleton*m_pInstance;
};
CSingleton*CSingleton::m_pInstance=NULL;//需要在這定義
CSingleton*CSingleton::GetInstance(){
if(m_pInstance==NULL)
//判斷是否第一次調用
m_pInstance=newCSingleton();
returnm_pInstance;
}
intmain(){
CSingleton*p1=CSingleton::GetInstance();
p1->age=10;
cout<<p1->age;
return0;
}
7. 能不能通過類名直接訪問靜態內部類的成員變數
外部類,內部類,匿名類,外部類就是兩個類並列的class A {} class B {},內部類:class A { class B {}},B可以直接使用包涵它的類的成員變數,內部類不能被除包涵類以外的類調用;還有就是匿名類,也是內部類 classA{new {}}省略定義類名直接定義方法和使用,這個適用於代碼比較簡單且這個類不需要被其他類調用。並且,外部類可以訪問內部類的方法以及靜態方法和數據域。
8. C++中,如何訪問類的靜態成員!
1.靜態成員函數中不能調用非靜態成員。
2.非靜態成員函數中可以調用靜態成員。因為靜態成員屬於類本身,在類的對象產生之前就已經存在了,所以在非靜態成員函數中是可以調用靜態成員的。
3.靜態成員變數使用前必須先初始化(如int MyClass::m_nNumber = 0;),否則會在linker時出錯。
4.在類的非靜態成員函數中使用類的靜態成員
class Point
{
public:
void init()
{
output();
}
static void output()
{
}
};
void main()
{
Pointpt;
pt.output();
}
5.使用類的靜態成員變數
#include <stdio.h>
class Point
{
public:
Point()
{
m_nPointCount++;
}
~Point()
{
m_nPointCount--;
}
static void output()
{
printf("%d\n", m_nPointCount);
}
private:
static int m_nPointCount;
};
int Point::m_nPointCount = 0;
void main()
{
Pointpt;
pt.output();
}
9. 對靜態成員的使用要注意什麼。
1.在賦值的時候需要注意,因為這個靜態成員的值在內存中只有一份,如果多個地方賦值,你要確定最後賦值的時候是否是你所需要的值.
(類的靜態變數是該類的對象所共有的,即是所有對象共享變數。所以建議盡量少用靜態變數)
2.調用的時候 類名.靜態方法名
3.靜態方法只能訪問類的靜態成員,不能訪問類的非靜態成員