C++ 杂项

1. 操作符重载

定义:
// Time.h
class Time {
  ...
  public:
      ...
      Time operator+ (const Time &t) const;
      ...  
};
实现
// Time.cpp
...
Time Time::operator+ (const Time &t) const
{
   Time sum;
   sum.minutes = minutes + t.minutes;
   sum.hours = hours + t.hours + sum.minutes / 60;
   sum.minutes %= 60;
   return sum; 
}
...

2. <<的重载

问题:

传统的 cout << "";  接受的是字符串,如果我们需要他能够输出一个类。这里需要用到友元和操作符的重载。

如果像上面使用类成员操作符的重载,则类必须放在第一个参数中,最后调用会是这样的

$ Time << cout

这样就有点迷惑性了,为了显示正常的样式,可以使用友元来做。

// Time.h
class Time {
    ...
    friend void operator<< (ostream &os, const Time &t);
};

// Time.cpp
...
void operator<< (ostream &os, const Time &t) {
    os << t.hours << " hours, " << t.minutes << " minutes.";
}

int main() {
    Time t(2, 30);
    cout << t;
}

// 输出
2 hours, 30 minutes.

但是如果<<符使用多个,则上面的代码会报错。修改如下

// Time.h
class Time {
    ...
    friend Time & operator<< (ostream &os, const Time &t);
};

// Time.cpp
...
ostream & operator<< (ostream &os, const Time &t) {
    os << t.hours << " hours, " << t.minutes << " minutes.";
    return os;
}

3. 虚函数

类的构造函数不能是虚函数,因为都要执行。类的析构函数应该是虚函数,why?

4. 工程文件  ProjName.dsp

我们在写工程的时候,需要向工程中添加文件 .cpp, .h,这时如果使用IDE工具如 VC,工具会自动向工程的 dsp 文件中添加我们新加文件的信息。

SOURCE=.\DlgXysxZy.cpp
# End Source File
# Begin Source File

SOURCE=.\DlgXysxZy.h
# End Source File
# Begin Source File

这里可以看到工程中就有这2个文件了,注意后面的 # 内容,这不是注释,感觉像是一种格式。  如果删掉 # 的内容,编译的时候会报错,提示加入的文件没有找到,即文件没有正确的加入到工程中。

5. MFC中的CString和类

class CommParam {
  CString add1;
  CString add2;
};

CommParam commParam;

定义上面的这个类,其内存表现为:

commParam的内存中存放的是add1, add2这2个类的地址,所以大小为8字节。

C++ 杂项_第1张图片

C++ 杂项_第2张图片

你可能感兴趣的:(C++,其他)