余睿的博客

浮生若梦,别多会少,不如莫遇

0%

基本概念

在创建派生类对象时:

  1. 先执行基类的构造函数,用来初始化派生类对象中从基类继承的成员
  2. 再执行成员对象类的构造函数,初始化派生类对象中的成员变量。
  3. 最后执行派生类自己的构造函数
阅读全文 »

基本概念

派生类可以定义一个和基类成员同名的成员,这就叫覆盖

在派生类中访问这类成员时,缺省的情况是访问派生类中定义的成员。要在派生类中访问由基类定义的同名成员时,要使用作用域符号::

阅读全文 »

类之间的关系

  • 继承关系:“是”关系

    • 基类为AB是基类A的派生类。
    • 逻辑上要求:一个B对象也是一个A对象。

    例如:从学生类派生出一个研究生类,原则上来说,一个研究生类也是一个学生类

    阅读全文 »

基本概念

继承:在定义一个新的类B时,如果该类与某个已有的类A相似(B拥有A的全部特征),那么就可以把A作为一个基类,而把B作为基类的一个派生类(也成为子类)。

  • 派生类是通过对基类进行修改和扩充得到的。在派生类中,可以扩充新的成员变量或成员函数。
  • 派生类一旦定义后,可以独立使用,不依赖于基类。
  • 派生类拥有基类的全部成员函数和成员变量。不论是publicprotected还是private
  • 在派生类的各个成员函数中,不能访问基类的private成员
阅读全文 »

基本概念

自增运算符++以及自减运算符--有前置、后置之分,为了区分该运算符为前置还是后置,c++有如下规定:

阅读全文 »

强制类型转换运算符是单目运算符,也可以被重载,但只能重载为成员函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
class Complex
{
double real, imag;
public:
Complex(double r = 0, double i = 0) :real(r), imag(i) {};
operator double() { return real; } //重载强制类型转换运算符 double
};
int main()
{
Complex c(1.2, 3.4);
cout << (double)c << endl; //输出 1.2
double n = 2 + c; //等价于 double n = 2 + c. operator double()
cout << n; //输出 3.2
}
阅读全文 »

一般情况下,将运算符重载为成员函数是比较好的选择。

但有时候,重载为成员函数又不能满足需求,重载为普通函数,又不能访问类的私有成员,这时我们就需要将运算符重载为友元。

阅读全文 »

赋值运算符重载需求

有时候我们希望运算符两边的类型可以不匹配。比如,把一个int类型的变量赋值给一个对象,或者把char*类型的字符串赋值给一个字符串对象,此时就需要重载赋值运算符=

阅读全文 »