对象的使用
static关键字
C语言中:
1. static关键字的作用
static关键字既能修饰变量,又能修饰函数。修饰变量既能修饰局部变量,又能修饰全局变量。
1) 修饰局部变量时,称为静态局部变量,延长变量的生存周期,程序执行结束才释放。
2) 修饰全局变量时,该全局变量只能在本文件可见,其他文件不可见。
3) 修饰函数时,该函数只能在本文件被调用,不能在其他文件中被调用。
2. 什么时候使用static关键字?
1) 当使用一个变量时,不希望其释放,可以使用static关键字。不使用全局变量的原因是全局变量对所有文件可见,比较危险。
2) 全局变量只需要在本文件使用时可以加static关键字,其他文件可以对该变量名进行重复定义,起到保护作用。
3) 函数只需要在本文件使用时可以加static关键字,其他文件可以对该函数名进行重复定义。
C++中:
1.static成员
1) 对于特定类型的全体对象而言,有时候可能需要访问一个全局的变量,比如统计某种类型对象已创建的数量
2) 全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量,可以用类的静态成员来解决这个问题。
注意事项:
Static成员要在类定义体外进行初始化与定义
只有整型static const成员(类常量)可以在类内初始化,而且只能在类内初始化。
static cons tint MAX_LEN = 1024;
2.static成员函数
没有this指针
非静态成员函数不可以访问静态成员
静态成员函数不可以访问非静态成员
(static成员函数不属于具体对象,与成员方法一样,是被共享的)
#include <iostream>
using namespace std;
class String
{
public:
String();
~String();
//String(char *str);
//void display();
//String(const String& other);
//String& operator=(const String& other);
//static int MAX_LEN; //类成员,在String.cpp中进行类外初始化
void setMAXLEN(intmaxlen);
int getMAXLEN();
private:
char *str_;
static int MAX_LEN; //类成员,在String.cpp中进行类外初始化
};
#include "String.h"
int String::MAX_LEN = 0; //一定要在类外初始化
String::String ()
{
cout<< "construct test" <<endl;
str_ = new char('\0');
}
String::~String ()
{
cout<< "destroy construct test"<< endl;
delete [] str_;
}
void String::setMAXLEN(int maxlen)
{
MAX_LEN =maxlen;
}
int String::getMAXLEN()
{
return MAX_LEN;
}
#include "String.h"
int main()
{
String s;
s.setMAXLEN(2048);
cout<< s.getMAXLEN() <<endl;
return 0;
}
const关键字
C语言中:
1.const关键字的作用
const修饰的变量为只读变量,表示不能通过变量名进行修改,但可以通过变量的空间进行修改。
2.什么时候使用const关键字?
一般用来修饰函数形参,避免在函数实现时修改实参的值,便于调试。
3.const关键字使用注意事项
1) 使用const修饰变量时,变量一定要初始化。
2) 注意哪些函数形参需要使用const关键字(这是函数实现者好的体现,防止函数对实参进行修改)。
实例:
const int *p = #//不能通过p修改其指向空间的值
int * const p = #//不能通过p修改其对应空间的值
(离谁近谁不能修改自身的值)
C++中:
使用const修饰,要一一对应,const引用指向const对象。
1.const成员函数
const成员函数不会修改对象的状态
const成员函数只能访问数据成员的值,而不能修改它
2.const 成员对象
如果一个对象指定为const, 就是告诉编译器不要修改它
二.mutable关键字
用mutable修饰的数据成员即使在const对象或在const成员函数中都可以被修改