静态成员 内联成员函数 const对象和const成员函数
2012-10-15 17:02
309 查看
1 静态成员
static数据成员
(1) static数据成员属于类,而不属于对象;
(2)static数据成员也是具有访问限制的;
在类外只能访问公有的static数据成员,且访问方式为:
类名::static公有数据成员
在类内可以访问所有的static数据成员,采用直接访问的方式。
(3) 若要初始化类的static数据成员,一般是在类定义之外进行。初始化的方式为:
type 类名::static数据=初始值;
[b] static成员函数[/b]
(1)成员函数也能被说明为静态的。静态成员函数没有this指针。静态成员函数只属于一个类。
因此,在类外调用一个公有静态函数,方式为:
类名::静态公有成员函数名(实参表)
而在类内,采用直接调用静态成员函数(包括公有的和私有的)的方式。
(2)静态成员函数没有this指针,因此,若在静态成员函数中访问非静态成员时,必须明确指出该静态成员函数在哪个对象上操作。
(3)因为STATIC成员不是任何对象的组成部分,所以STATIC成员函数不能被声明为const。
(4)STATIC函数也不能被声明为虚函数。
2 内联成员函数
在C++中,宏的概念是作为内联函数来实现的,而内联函数无论在任何意义上都是真正的函数。唯一不同之处是内联函数在适当的地方像宏一样展开,所以不需要函数调用的开销。因此,应该永远不使用宏,只使用内联函数。但为了使之有效,必须使函数体和声明结合在一起。
任何在类中定义的函数自动地成为内联函数,但也可以使用inline关键字放在类外定义的函数前面使之成为内联函数。
3 const对象和const成员函数
某些对象是需要修改的,而有些对象是不需要修改的。我们把那些不需要修改的对象称为const对象。例如:
const Date dt(2004,1,1);
声明了类Date的一个const对象,并把该对象初始化为2004年1月1日的时间。
一个const对象只能访问const成员函数。
类的成员函数可以通过加const来限定函数对对象的数据成员的修改。定义的方式是在函数头的参数表后面加上const。例如:
class Date
{
…
public:
int GetYear( ) const
{
return year;
}
…
};
对于在类体之外定义的const 成员函数,必须在它的定义和声明中同时指定关键字const。
把一个要修改类数据成员的函数声明为const 是非法的,例如:
class Date
{
…
public:
int GetYear( ) const
{
year=2004; //错误!
}
…
};
一个const成员函数调用const和非const对象是安全的,不修改数据成员的任何函数都应该把它们声明为const,这样它可以和const对象一起使用。
应该注意的是,构造函数和析构函数肯定是要修改对象的。
static数据成员
(1) static数据成员属于类,而不属于对象;
(2)static数据成员也是具有访问限制的;
在类外只能访问公有的static数据成员,且访问方式为:
类名::static公有数据成员
在类内可以访问所有的static数据成员,采用直接访问的方式。
(3) 若要初始化类的static数据成员,一般是在类定义之外进行。初始化的方式为:
type 类名::static数据=初始值;
[b] static成员函数[/b]
(1)成员函数也能被说明为静态的。静态成员函数没有this指针。静态成员函数只属于一个类。
因此,在类外调用一个公有静态函数,方式为:
类名::静态公有成员函数名(实参表)
而在类内,采用直接调用静态成员函数(包括公有的和私有的)的方式。
(2)静态成员函数没有this指针,因此,若在静态成员函数中访问非静态成员时,必须明确指出该静态成员函数在哪个对象上操作。
(3)因为STATIC成员不是任何对象的组成部分,所以STATIC成员函数不能被声明为const。
(4)STATIC函数也不能被声明为虚函数。
2 内联成员函数
在C++中,宏的概念是作为内联函数来实现的,而内联函数无论在任何意义上都是真正的函数。唯一不同之处是内联函数在适当的地方像宏一样展开,所以不需要函数调用的开销。因此,应该永远不使用宏,只使用内联函数。但为了使之有效,必须使函数体和声明结合在一起。
任何在类中定义的函数自动地成为内联函数,但也可以使用inline关键字放在类外定义的函数前面使之成为内联函数。
3 const对象和const成员函数
某些对象是需要修改的,而有些对象是不需要修改的。我们把那些不需要修改的对象称为const对象。例如:
const Date dt(2004,1,1);
声明了类Date的一个const对象,并把该对象初始化为2004年1月1日的时间。
一个const对象只能访问const成员函数。
类的成员函数可以通过加const来限定函数对对象的数据成员的修改。定义的方式是在函数头的参数表后面加上const。例如:
class Date
{
…
public:
int GetYear( ) const
{
return year;
}
…
};
对于在类体之外定义的const 成员函数,必须在它的定义和声明中同时指定关键字const。
把一个要修改类数据成员的函数声明为const 是非法的,例如:
class Date
{
…
public:
int GetYear( ) const
{
year=2004; //错误!
}
…
};
一个const成员函数调用const和非const对象是安全的,不修改数据成员的任何函数都应该把它们声明为const,这样它可以和const对象一起使用。
应该注意的是,构造函数和析构函数肯定是要修改对象的。
相关文章推荐
- 静态成员 内联成员函数 const对象和const成员函数
- C++静态成员函数不能声明为const、volatile、virtual的原因 与 C++的对象模型
- 7周【任务1】含有静态数据成员和成员函数的Time类:类中所有的对象共有的数据
- const对象和const成员函数
- 达内学习笔记——静态成员函数,匿名对象,
- 面向对象的程序设计学习笔记-19-静态成员函数的使用
- 静态成员函数为何不能const
- java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况
- 解决方案:静态成员对象的声明在头文件中,函数代码在另外一个文件中,提示链接错误
- C++中const成员函数和const对象
- const对象和const成员函数
- 类对象成员函数的const增强zz
- 深度探索C++对象模型之:成员函数语义学--静态成员函数
- 为什么静态成员函数不能是const
- 非静态成员函数后面加const
- java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况
- C++中的const成员函数和const类对象
- const对象与const成员函数
- 常对象及常成员及静态数据成员和静态成员函数的学习内容。
- C++编程常见错误—cannot have cv-qualifier//不能有CV限定,在C++中CV指const和volatile—1、非成员函数不能有CV限定,2、静态成员函数不能有CV限定