1.当父类有private的变量,子类想调用
如:father的private-->name,money
子类继承了父类的private所以name,money在子类中不用写了
如果子类调用name,money的话而且子类没有定义函数则就调用父类的函数来获得,不然子类无法获得name,money
2.子类继承父类时,要先调用父类的构造函数在调用子类的
如:Father(const char*name, int age);
Son(const char *name, int age, const char *game);---》子类要这样做
Son::Son(const char *name, int age, const char *game) : Father(name, age) {-----------------》重要
cout << FUNCTION << endl;
// 没有体现父类的构造函数, 那就会自动调用父类的默认构造函数!!!
this->game = game;
}
3.protected,在protected中定义变量子类可以指直接调用
子类的成员函数中,不能直接访问父类的private成员,已经这些成员已经被继承下来了,但是却不能访问。
只有通过父类的public函数来间接访问,不是很方便。
比如,刚才Demo中Father类中的name和age成员。
解决方案:
把name和age定义为protected访问访问权限。
效果:
Son类的成员函数中,可以直接访问它的父类的protected成员。
但是在外部,别人又不能直接通过Son对象来访问这些成员。
4.子类型(特殊)
1.基类(父类)的指针,可以指向这个类的公有派生类(子类型)对象。
Son yangGuo;
Father * f = &yangGuo;
2.公有派生类(子类型)的对象可以初始化基类的引用
Son yangGuo;
Father &f2 = yangGuo;
3.公有派生类的对象可以赋值给基类的对象
Son yangGuo;
Father f1 = yangGuo;
注意:以上的应用,反过来就会编译失败!而且一定要是public继承,用了这种的话只能使用用父类的方法,但地址还是自己的
include
include
using namespace std;
class A {
public:
void kill();
};
void A::kill() {
cout << "A的KILL" << endl;
}
class B : public A{
public:
void kill();
void B_find();
};
void B::kill() {
cout << "B的KILL" << endl;
}
void B::B_find() {
cout << "B的find" << endl;
}
void res(A &other) {
other.kill();
cout << &other << endl;
}
int main() {
B b;
res(b);-----------------------------》输出的是父类的KILL
cout << &b << endl;
A* a = &b;//
a->kill();-------------------------》输出的是父类的KILL
cout << a << endl;
}