The C++ Programming Language 读书笔记 ch11

 第11章, 讲的是运算符重载

基本的模式就是:返回类型 operator运算符(参数列表) { } 例如:

complex& operator+(const complex& x, const complex& y);

        在运算符重载中,要注意区分一元运算符, 二元运算符重载时所取的参数个数, 而且, 此参数个数跟运算符函数是否为成员函数也有关系. 例如:

 class A

{

    int a;

public:

    A& operator+(const A& x); // 二元运算符 + 的左操作数默认为调用函数对象本身, 右操作数为x

};

A& operator+(const A& x, const A& y); // 非成员函数, +的左操作数为x, 右操作数为y

因为输出运算符重载时一般模型为: ostream& operator<<(ostream& os, const A& x); 其左操作数为ostream, 所以输出运算符重载时一般都是非成员函数, 但是,为了方便访问类成员变量, 在类声明时可以将其声明为friend函数, 如:

class A

{

    friend ostream& operator<<(ostream& os, const A& x);

};

输入操作符重载时,也是如此.

        转换. 这一章里面介绍的转换集中在用户定义的class向C++内置类型(例如:int, char, double等)的转换. 通过转换可以使用户定义的class具有内置类型的类似行为, 例如:

class A

{

        int a;

public:

        operator int() { return a; };

};

        这样, 在进行 A + 5运算时, 会隐式调用函数 operator int()将A转换成int类型.

        嵌套类, 嵌套类可以在被嵌套的类里声明与定义. 嵌套类的定义应该在使用它之前定义. 例如:

class String
{
public:
37行    Cref operator[](int i) /* 这里报错:error C2143: syntax error
                              : missing ';' before '['  */
38行    {
            check(i);
            return Cref(*this, i);
        }

public:
    clss Cref
    {
        这里是class Cref的定义
    };
            return Cref(*this, i);
        }

public:
    class Cref
    {
        这里是class Cref的定义
    };

};

在VS2005下编译总是报错:

错误    1   error C2143: syntax error : missing ';' before '['
d:/codes/final/ch11_2/ch11_2/ch11_2.h   37
错误    2   error C4430: missing type specifier - int assumed. Note: C++
does not support default-int    d:/codes/final/ch11_2/ch11_2/ch11_2.h   37
错误    3   error C4430: missing type specifier - int assumed. Note: C++
does not support default-int    d:/codes/final/ch11_2/ch11_2/ch11_2.h   38

要解决这个问题就应该将Cref的定义要放在 Cref operator[](int i)前面.

自己理解的只有这些了, 觉得理解得很少. 但是又不知道应该如何改进, 有些疑问: 嵌套类有什么用? 什么时候才要用到嵌套类?

还有,对11.9所提及的"函数调用"不是很理解. 这里提及的函数调用跟平时我们编程时, 或者说是C语言编程时所说的函数调用有什么区别与相同之处呢?

还有就是在实现11.12提及的一个字符串类String时,关于类的设计问题:

/**********************************************
 * 一个类应该怎样去组织其数据成员,成员函数,哪些
 * 成员函数应为inline, 哪些应为private,哪些应为
 * public, 哪些应该将声明与定义都写在类界面设计
 * 那里, 哪些定义应该写在相应该的类实现那里, 现
 * 在看来,真是有点难搞.
 * 怎么样,才能让从类设计到类实现的可读性更强?
 * 怎么样,才能让程序的可读性更强?
**********************************************/

感到自己的C++路还很长, 一切才刚刚开始. 多谢看到这里的各位网友, 很希望得到你们的指点, 真的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值