conversions
- public inheritance should imply(意味着) substitution(代替)
- if B is a A,you can use a B anywhere an A can be used
- if B is a A, then everything that is true for A is also true of B
- be careful if the substitution if not valid
- if B is a A,you can use a B anywhere an A can be used
| D is deriver(派生) from B | ||
|---|---|---|
| D | => | B |
| D* | => | B* |
| D& | => | B& |
子类的对象可以当作父类来看待
#include <iostream>
using namespace std;
class A{
public:
int i;
A():i(10){};
};
class B:public A{
private:
int j;
public:
B():j(30){};
void f(){
cout<<"b.j="<<j<<endl;
}
};
int main(){
A a;
B b;
cout<<a.i<<"-------"<<b.i<<endl;
cout<<sizeof(a)<<" "<<sizeof(b)<<endl;
int *p=(int*)&a;
cout<<p<<" "<<*p<<endl;
*p=20;
cout<<a.i<<endl;
p=(int*)&b;
cout<<p<<" "<<*p<<endl;
p++;
*p=50;
b.f();
return 0;
}
--------------------------------
10-------10
4 8
0x6ffe00 10
20
0x6ffdf0 10
b.j=50
--------------------------------
Upcasting 向上造型
- upcasting is the act of converting from a Derived reference or pointer to a base class reference or pointer
upcasting examples
Mannager pete("Pere"."88888888","Bakery");
Employee* ep = &pete; //upcast 指针
Employee& er = pete; //upcast 引用
- lose type information about the object:
ep->print(cout); //print base class version 使用的父类的函数
子类中的函数如果与父类中的函数重名则父类的中的函数隐藏
本文探讨了面向对象编程中继承的概念,如何通过派生类(如B从A继承)实现对象间的替换和功能扩展。通过C++代码实例,讲解了upcasting(向上转型)的概念,展示了如何将子类对象转换为父类引用或指针。重点涉及了子类隐藏父类函数的问题和内存示例。
1556

被折叠的 条评论
为什么被折叠?



