-
在上面的截图中最下面的两个写法是错误的,上面的写法是正确的查看全部
-
soldier继承了person,就算soldier里面的play方法有参数,person的play方法没参数,他们也不可以形成重载。简单的说: soldier.play(7);调用的是soldier里面的play方法 soldier.play();还是调用不了父类的play方法,只能通过soldier.person::play()来调用查看全部
-
注意:在#include的时候,如果是include “aaa.h”,则aaa.h是自己创建的文件,如果是<aaa.h>就是系统自带的头文件。查看全部
-
在继承关系中,假设子类有一个函数名字叫play(),父类也有一个函数名叫play(),那么子类的函数会把父类的隐藏起来,例如soldier继承了person,那么: soldier.play()就只会调用子类的play方法, soldier.Person::play()则调用的是父类的play方法。查看全部
-
在继承方式中,曾经讲过三种继承方式,public,private,protect 在public继承方式中,父类的public里面的成员去到子类中仍然是public,而父类protect则还是protect。 在protect继承方式中,父类的public里面的成员去到子类中就变成protect,而父类protect则还是protect。 在private继承方式中,父类的public里面的成员去到子类中就变成private,而父类protect也是在子类中变成private。查看全部
-
private和protect在继承时的区别: 子类通过protect继承了父类的时候,子类可以通过自己来访问父类的数据成员。 子类通过private继承了父类的时候,子类不能通过自己来访问父类的数据成员,父类的数据成员只有通过自己才能访问。查看全部
-
private继承:public成员只能被private继承一次,被继承后属于private,不可以被对象直接访问; protected成员只能被private继承一次,被继承后属于private,不可以被对象直接访问; private成员不能被private继承。 protected继承:public成员可以一直protected继承下去,被继承后属于protected,不可以被对象直接访问; protected成员可以一直protected继承下去,被继承后属于protected,不可以被对象直接访问; private成员不能被protected继承。 public继承:public成员可以一直public继承下去,被继承后属于public,可以被对象直接访问; protected成员可以一直public继承下去,被继承后属于protected,不可以被对象直接访问; private成员不能被public继承查看全部
-
虚继承的用处就是实例化后的对象只有一份基类的数据。very important查看全部
-
公有继承时,派生类在访问基类的保护数据成员时要通过函数去访问,不能用对象直接访问。private不能继承、类外不能访问,protected能继承,类外不能访问,public能继承、类外能访问。总结:权限:类外访问 < 继承 < 类内访问。查看全部
-
使用虚继承子类无法传递参数给父类,最底层的类使用父类的函数与默认值查看全部
-
解决重定义(用宏定义): #ifndef XXX_H //假如没有定义xxx.h文件 #define XXX_H //那就定义xxx.h文件 ... #endif查看全部
-
父类指针指向子类对象,普通析构函数无法释放子类所占堆空间查看全部
-
父类指针喷不到子类特有的对象查看全部
-
指向派生类的指针不能用基类赋值查看全部
-
#include <iostream> #include <stdlib.h> #include <string> using namespace std; /** * 定义人类: Person * 数据成员: m_strName * 成员函数: attack() */ class Person { public: string m_strName; void attack() { cout << "attack" << endl; } }; /** * 定义士兵类: Soldier * 士兵类公有继承人类 * 数据成员: m_strName * 成员函数: attack() */ class Soldier:public Person { public: string m_strName; void attack() { cout << "fire!!!" << endl; } }; int main(void) { // 实例士兵对象 Soldier soldier; // 向士兵属性赋值"tomato" soldier.m_strName = "tomato"; // 通过士兵对象向人类属性赋值"Jim" soldier.Person::m_strName = "Jim"; // 打印士兵对象的属性值 cout << soldier.m_strName << endl; // 通过士兵对象打印人类属性值 cout << soldier.Person::m_strName << endl; // 调用士兵对象方法 soldier.attack(); // 通过士兵对象调用人类方法 soldier.Person::attack(); return 0; }查看全部
举报
0/150
提交
取消