pc = new 类名(); 在堆里面创建一个对象, 返回的是指针. 因此 pc 的申明要指定为指针类型 类名 * pc;
深拷贝与浅拷贝: 拷贝一个对象时, 默认的拷贝构造函数会按成员拷贝. 如果此时对象中含有一个指针指向堆区的一个对象, 默认拷贝出来的新对象将会含有一个指针, 指向堆区的同一个对象. 这种拷贝称为浅拷贝. 浅拷贝有一些问题, 例如在析构时会造成二次析构. 因此需要重新定义拷贝构造函数, 为拷贝出来的对象包含的指针拷贝新的堆对象. 这称为深拷贝.
在公有派生中, 基类的对象无法访问protected 成员, 但是继承基类的子类可以访问protected 成员
public protected private 既可以做类成员的访问限定符, 也可以指定派生类型. 最常用的是公有派生.
虚拟继承: 举个例子, student 从person 继承, teacher 从person 继承, 助教从student+teacher 两个类继承, 这样助教这个类将包含重复的person 类的成员. 使用virtual 继承, 同名的成员将只有一份拷贝, 直观上就是根据名字做了去重. class student : virtual public person
派生类的对象可以赋值给基类的对象, 反过来不行, 因为子类对象的成员无法赋值. 同理, 子类对象的指针可以赋值给基类对象指针. void 指针特殊处理.
多态性: 编译时多态, 例如: 函数重载, 运算符重载. 运行时多态, 通过继承与虚函数来实现. 虚函数只能在类内部定义, 子类继承过来之后, 重新定义这个函数, 不需加virtual 关键字, 但是函数名和参数必须完全一致. 设置基类的函数为virtual 之后, 子类的地址可以赋值给基类的指针, 调用的将会是基类的函数, 而不是子类的函数. 将一个类中的函数尽量设置为虚函数是有好处的. 虚函数是在子类对象的指针赋值给基类对象指针时起作用的. 如果不定义为virtual 函数, 将调用子类的函数. 属于重载.
纯虚函数: 基类中不实现的成员函数. 依赖于子类实现. 含有纯虚函数的基类不能用来定义对象. 这是一个抽象类. 定义方法: virtual 函数名(参数列表) = 0; 派生类必须重新定义函数体. 当子类的对象指针赋值给基类的对象时, 调用纯虚函数将会调用子类定义的函数. 通过这种办法, 可以实现多个子类定义多个函数. 不同对象将调用自己定义的函数.
函数指针:
C++笔记
最新推荐文章于 2023-07-20 14:01:54 发布