C++指针入门(二)
来源:互联网 发布:齐鲁大学生软件大赛 编辑:程序博客网 时间:2024/06/05 16:08
用函数指针变量调用函数
一个函数在编译时被分配一个入口地址,这个函数的入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用函数。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。
看程序:
int max(int x, int y) {
int z;
if(x > y)
z = x;
else
z=y;
return z;
}
void main() {
int (*p)(int, int); //定义指向函数的指针变量p
int a, b, m;
p = max;// 使p指向函数max,此句不能省
cin>>a>>b;
m = p(a,b);
cout<<"max="<<m<<endl;
}
注意:(*p)两侧的括号不可省略,表示p先与*结合,它是指针变量,然后再与后面的()结合,表示此指针变量指向函数,这个函数值是整型的。 只需将函数名max赋给p,不能写成”p = max(a,b);”形式。函数名代表函数入口地址,而max(a,b)则是函数调用了。
指针函数
返回指针值的函数简称为指针函数
对象的初始化
在建立一个对象时,常常需要做某些初始化的工作,例如对数据成员赋初值。如果一个数据成员未被赋值,则它的值是不可预知的,因为在系统为它分配内存时,保留了这些存储单元的原状,这就成为了这些数据成员的初始值。与人们的要求不相符,值应该是确定的。类并不是一个实体,而是一种抽象类型,并不占存储空间,无处容纳数据。因此在声明类时初始化类的数据成员是错误的。
例:
class Time {
public:
Time() {
hour = 2;
minute = 3;
sec = 5;
}
void set_time();
void show_time();
private:
int hour;
int minute;
int sec;
};
void Time::set_time() {
cin>>hour;
cin>>minute;
cin>>sec;
}
void Time::show_time() {
cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
void main() {
Time t1;
t1.show_time();
}
在建立对象时自动执行构造函数,它的作用是对该对象中的数据成员赋初值0
有关构造函数的说明:
(1) 什么时候调用构造函数:在类对象进入其作用域时调用构造函数。如,在函数fun1开头定义了一个对象a,则在执行fun1函数时,就要建立对象a,对象a就有了自己的作用域,或者说,对象a的生命周期开始了。
(2) 构造函数不需要用户调用,也不能被用户调用。下面用法是错误的。
t1.Time();
构造函数是在定义对象时由系统自动执行的,而且只执行一次。构造函数一般声明为public
(3) 在构造函数的函数体中不仅可以对数据成员赋值,而且可以包含其他语句,例如cout语句。但是一般不提倡在构造函数中加入与初始化无关的内容,以保持程序的清晰。
(4) 如果用户自己没有定义构造函数,则C++系统自动生产一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作,会对数据提供一个默认值。
(5) 带参数的构造函数中的形参,其对应的实参在定义对象时给定。Box box1(10, 20);
(6) 如果在建立对象时选用的是无参构造函数,应注意正确书写定义对象的语句。如:
Box box1; // 建立对象的正确形式
注意不要写成
Box box1();//建立对象的错误形式,不应该有括号
对象有地址,存放对象初始地址的指针变量就是指向对象的指针变量。对象中的成员也有地址,存放对象成员地址的指针变量就是指向对象成员的指针变量。
静态初始化对象指针
Time t, *p; // 定义对象t和指针变量p
p = &t;
cout<<p->hour<<endl;
动态初始化对象指针
Time *p;
P = new Time();
cout<<p->hour<<endl;;
- C语言指针入门(二)
- 指针入门(二)
- C++指针入门(二)
- C++指针入门(二)
- C语言指针(二)
- c与指针(二)
- C/C++ 指针 (二)
- C和指针(二)
- 《c和指针》(二)
- 《c和指针》(二)
- C语言指针(二)
- C指针基础(二)
- C指针操作(二)
- C++primer 指针(二)
- C语言指针教程----入门到精通<二>
- C语言指针(二)指向指针的指针
- c语言程序设计入门(二)
- C程序设计语言--指针与数组(二) 指针数组 数组指针 函数指针 指针函数
- 关于ListView中的Adapter说明以及列表增加最后一项(更多选项)的实现
- 一个SQL
- hdoj 1040
- 线性代数学习过程中使用的一些工具及技巧
- 杭电ACM 1715 大菲波数
- C++指针入门(二)
- BASH操作
- 解释器模式(Interpreter)
- 使用DES加密解密的工具类
- hdoj1048
- bash 调用历史命令
- linux__main函数参数___操作(更新中)
- 采用restrict关键字避免二义性
- hdoj 1049