::和.的区别
来源:互联网 发布:js字符串转数组 编辑:程序博客网 时间:2024/04/29 03:14
::(作用域运算符)和.(成员运算符)的区别
这是在看::运算符的作用时产生的疑问。::有三个作用:
1、全局作用
2、类作用
3、名称空间
1和3不多说,在2中,其说明是:
作用域符号::的前面一般是类名称,后面一般是该类的成员名称,C++为了避免不同的类有名称相同的成员而采用作用域的方式进行区分
如:A,B表示两个类,在A,B中都有成员member。那么
A::member就表示类A中的成员member
B::member就表示类B中的成员member
成员也无非就是类中的数据成员和成员函数,我的疑问就来了。
类的对象调用成员函数是这样的:
A a;
a.member();
既然可以用A;;member;那么和a.member();有什么区别呢?
首先最直观的一点,一个是对象调用,一个是类调用。
但是不实例一个对象,而用类去调用函数,这样是可行的吗?
接下来写例子程序测试:
class A
{
public:
void fun()
{
cout<<"this is A"<<endl;
}
};
class B
{
public:
void fun()
{
cout<<"this is B"<<endl;
}
};
int main()
{
A.a;
a.fun();
B::fun():
return 0;
}
编译产生错误:没有对象无法调用成员函数void B::fun();
我就纳闷了,说好的::符号类作用呢?
再试试数据成员吧:
class A
{
public:
int nA;
};
class B
{
public:
int nB;
};
int main()
{
A a;
a.nA = 1;
B::nB = 2;
cout<<a.nA<<endl;
cout<<B::nB<<endl;
return 0;
}
编译产生错误::对非静态数据成员‘B::nB’的无效使用。
那这个::运算符的类作用是怎么用的?继续网上查资料,查到如下使用方法:
声明一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成void A::f(),表示这个f()函数是类A的成员函数。
class A
{
public:
void fun();
};
void A::fun()
{
cout<<"this is A"<<endl;
}
int main()
{
A a;
a.fun();
return 0;
}
运行成功。
但是想不出这样做有什么意义。继续网上找答案,找到的解释是:
在类的内部对成员函数作声明,而在类体外定义成员函数,这是程序设计的一种良好习惯。如果一个函数,其函数体只有2-3行,一般可在声明类时在类体中定义。多于3行的函数,一般在类体内声明,在类外定义。这样可以使类的定义看起来更加清晰易懂。
问题解决了,但想想其实只是我刚学C++,对其不熟悉造成的。然而折腾了这么久,也算是有点收获。
总结:.运算符用于对象对其类的成员进行调用。而;;运算符是类使用的。
- 和和的区别
- & 和 &&、|和||的区别:
- &和&&、|和||的区别
- &&和&,||和|的区别
- &和&&、|和||的区别
- &和&&、|和||的区别
- ../和./和/的区别
- &和&&,|和||的区别
- "&"和"&&"、"|"和"||"的区别
- &和&& |和||的区别
- &和&&的区别 |和||的区别
- &&和&的区别,||和|的区别
- &和&&的区别以及|和||的区别
- &&和&的区别? | | 和|的区别?
- &和&&的区别,|和||的区别
- &和&&的区别及!和~区别
- '&'和'*' (C++)的区别
- &&和&的区别
- http协议中的get与post方法区别分析
- CodeForces 555A Case of Matryoshkas 娃娃组装
- 华为AR系列路由器密码重置
- ISP模块之色彩增强算法--HSV空间Saturation通道调整
- 奇偶排序
- ::和.的区别
- rust raw pointer使用方法(2)
- window.prompt提示框点击取消后返回的是"",点击确定后返回的是用户输入内容。
- cocos studio使用bmpfont生成的字体
- 完成端口好文
- Hibernate一对一映射学习
- windows下 OpenCV 2.x.x Python 2.7.x配置
- clickonce的密钥到期问题处理
- C++/winapi截屏保存BMP