注册 登录
编程论坛 C++教室

看不懂这中表示方式

jjg 发布于 2009-08-23 15:47, 484 次点击
程序代码:
#include <iostream>   
using namespace std;   
   
class Test      
{      
    public:  
        Test(int a = 0)  
        {  
            cout<<this<<":"<<"载入构造函数!"<<a<<endl;  
            Test::a = a;       //这是什么意思???a不是已经在类中吗?干嘛还这样写,还有就是我为什么不把Text::a改写成M之类的字母呢?
        }  
        Test(Test &temp)  
        {  
            cout<<"载入拷贝构造函数!"<<endl;  
            Test::a = temp.a;  
        }  
        ~Test()  
        {  
            cout<<this<<":"<<"载入析构函数!"<<this->a<<endl;  
            cin.get();  
        }  
        operator int()  
        {  
            cout<<this<<":"<<"载入转换运算符函数的内存地址:"<<this->a<<endl;  
            return Test::a;  
        }  
    public:  
    int a;  
};  
int main()  
{  
    Test a(100),b(100),c;  
    cout<<"a的内存地址"<<&a<<" | b的内存地址"<<&b<<endl;  
    c=Test((int)a+(int)b);//显示式转换  
    //c=a+b;//隐式转换  
    cout<<"c的内存地址"<<&c<<endl;  
    cout<<c.a<<endl;    //c.a又是什么意思??    system("pause");  
}
3 回复
#2
ly8610142009-08-23 22:51
回复 楼主 jjg
Test::a = a;之所以写成Test::a,是为了与形参a,即等号后面的那个a区分,其实你把构造函数形参表里的int a = 0改成int b = 0,然后构造函数体中相应的a改成b,则Test::a直接写成a就行,这时候整个构造函数改为:
Test(int b = 0)  
        {   
            cout<<this<<":"<<"载入构造函数!"<<b<<endl;  
            a = b;      
        }  
那些temp.a, this->a, (int)a, c.a都是指的类对象的数据成员a
这个例子应该是在讲变量作用域时给的吧,应该是为了理解作用域才举这样的例子,一般情况下是避免这种易混淆的变量命名的。
#3
pangding2009-08-24 00:28
回复 楼主 jjg
我也觉得是故意写成这样的,实际编程谁会故意找这么多重名的增加困难……
#4
明次2009-08-24 20:34
cout<<c.a<<endl;    //c.a又是什么意思??
用C对象来调用这个成员
1