一些零散的C++语法思考
2015-05-13 16:44
148 查看
1.关于声明形式为CLASS::*MEMBER的用法。
看下面例子:
#include<iostream>
using namespace std;
class A{
public:
A(int c):b(c){}
int b;
};
void fun(A a,int A::*b){
cout<<a.*b<<endl;
}
int main(){
A a(2);
fun(a,&A::b);
return 0;
}
运行结果是2。
假如在程序中有一个声明形式为A::*b的语句,该怎么理解:
应该是理解成A中成员b的一个指针。A中有一个int b成员,但是该成员并不是指针类型的,为了特指A中b的一个指针类型,所以应该用int A::*b的声明形式,这样子声明之后,在给该声明传值时,应该写成&A::b,并且为了能够引用该值,还应该传一个参数A a,如上面程序所示。
为什么在声明时不直接写成int *A::b,很显然,这样子表示A中有一个int*类型的b,显然是错误的,所以,为了表示类中某个成员的指针,一般声明成CLASS::*MEMBER的形式。
看下面例子:
#include<iostream>
using namespace std;
class A{
public:
A(int c):b(c){}
int b;
};
void fun(A a,int A::*b){
cout<<a.*b<<endl;
}
int main(){
A a(2);
fun(a,&A::b);
return 0;
}
运行结果是2。
假如在程序中有一个声明形式为A::*b的语句,该怎么理解:
应该是理解成A中成员b的一个指针。A中有一个int b成员,但是该成员并不是指针类型的,为了特指A中b的一个指针类型,所以应该用int A::*b的声明形式,这样子声明之后,在给该声明传值时,应该写成&A::b,并且为了能够引用该值,还应该传一个参数A a,如上面程序所示。
为什么在声明时不直接写成int *A::b,很显然,这样子表示A中有一个int*类型的b,显然是错误的,所以,为了表示类中某个成员的指针,一般声明成CLASS::*MEMBER的形式。
相关文章推荐
- 关于C++现状的一些思考
- C++一些语法注意点
- c++多态性的一些思考
- 关于C++和C#的自定义数据类型转换的一些思考
- C/C++中的一些基本语法(define/typedef)
- C#与C++的一些语法区别
- c++模板的一些语法
- c++一些语法模板
- C++基础入门教程(七):一些比较特别的基础语法总结
- 关于C++多态的一些思考(编译期绑定和运行期绑定)
- C++经典题目:有n个人围成一圈,顺序排号,然后数数进行淘汰的解法和一些思考
- 【C++ 学习笔记】 一些奇特的语法和指令
- C++的一些高级语法
- 对C++锁的一些思考
- C++编程中的一些不太常用C++语法
- C++ 语言的一些语法:
- 一些背我遗忘又比较有用的C++语法知识
- 关于C++友元的一些思考
- C++中一些容易迷惑的语法点总结
- 【C++】C++语法的一些小问题