const关键字:
1 const修饰类数据成员必须使用成员初始化列表进行初始化
private:
const int val;
A::A():val(0);//const数据成员必须使用初始化列表进行初始化
2 const修饰类的成员函数和(函数定义体):任何不会修改数据成员的函数都应用const修饰,这样,当不小心修改了数据成员或调用了非const成员函数时,编译器都会报错。
int getvalue(void) const;
3 const修饰函数的返回值:如给指针传递的函数返回值加const,则返回值不能被直接修改,且该返回值智能被赋值给加const修饰的同类型指针。例如:
const char* getchar(void){};
char *ch = getchar();//error
const char *ch = getchar();//right
static类成员:
static数据成员在类外分配空间和初始化。
在static成员函数中不能使用this指针(this指针是一个对象的地址,static成员函数和static变量是属于类这个层次的,不属于任何一个对象)
class Student
{
public:
Student(int m_id ,int m_score );//:id(m_id),score(m_score);
~Student();
Student(const Student& pt);
//void setid(int s_id);
int getid(void);
int getscore(void);
//void setscore(int s_score);
//void getscore(void);
static int getnum(void);
private:
int id;
int score;
static int num;
//char name[10];
};
int Student::num = 0;//不能加static 声明的时候加
int Student::getnum(void)//不能加static 声明的时候加 static int //Student::getnum(void),静态的变量是通用的 只要是同一个类就行 num++ ,建立一个对象//加一个,
{ //如果现在加static就报错,这是和C有点不同的地方。
return num;
}
静态的函数能直接用类再加上类作用域就行,不需要通过对象调用,也可以通过对象来调用,只能说范围更广了。
cout<<" num is "<<Student::getnum()<<endl;//静态的函数能直接用类再加上类作用域就行,不需要通过对象调用,也可以通过对象来调用,只能说范围更广了。
cout<<" num is "<<joe.getnum()<<endl;//静态的函数能直接用类再加上类作用域就行,不需要通过对象调用,也可以通过对象来调用,只能说范围更广了。