C++类——高级(五)

1.构造函数(三)

构造函数在用一个成员来初始化另一个成员的时候,一定要注意顺序。初始化顺序要跟成员的声明顺序一致。如以下代码是未定义的。

class A{
private:
    int i;
    int j;
public:
    A(int k):j(k),i(j){ }
};

初识化顺序与成员声明顺序相同。因此这段代码的意思是:用未初始化的j来初始化i!
我们应该这样改:

A(int k):i(k),j(i){ }

1.1默认构造函数

当一个类有多个构造函数时,默认构造函数时不可少的。请注意!

class A{
public:
    A()=default;//如有其它构造函数,此函数必须!
    //...
};  

2.重载运算符

重载运算符不建议经常使用,但是必要时还是可以的。

重载运算符不可以创造运算符

2.1.重载运算符与this指针

在类的内部,有一个名为this的隐式指针。它指向获取成员的对象。因此,我们在类内重载运算符的时候,要特别注意this指针是一个隐式指针。

class A{
public:
    operator+(A&);
    //隐式为(A&,*this)
    //...
};

2.2.重载运算符与成员函数

有些运算符必须为成员函数。如:[]等。还有几个运算符不可重载. .* ?:

3.编译器处理类在int main()中的成员调用与获取

3.1.this指针

这一切与this指针还是脱不了干系。实际上,编译器在处理成员函数的时候,会自动的加上一个实参:const *this。因此,有如下代码:

class A{
public:
    ostream& print(const string=" ");
};
int main()
{
    A a;
    a.print();
};

编译器将翻译为:

ostream& print(const string=" ");
//伪代码
print(&a);

此时*this=&a;
如有错误,请在评论中提出。
感谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值