c++基类与派生类之间的转换

时间:2022-09-07 23:51:38
 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 class Box
 5 {
 6 public:
 7     void setWidth(double width){
 8         this->width=width;
 9     }
10     void setHieght(double height){
11         this->height=height;
12     }
13     void getWidth(){
14         cout<<width<<endl;
15     }
16 private:
17     double width,height;
18 };
19 class ColorBox : public Box{
20 public:
21     void setColor(string color){
22         this->color=color;
23         
24     }
25     void getColor(){
26         cout <<color<<endl;
27     }
28 
29 private:
30     string color;
31 };
32 int main(){
33     ColorBox colorbox;
34     Box  box;
35     colorbox.setColor("red");
36     colorbox.setHieght(10);
37     colorbox.setWidth(10);
38     colorbox.getColor();
39     colorbox.getWidth();
40     box=colorbox;
41     box.getWidth();
42     //使用指针
43     Box *ptr;
44     ptr=&colorbox;
45     cout<<ptr<<endl<<&box<<endl;
46     ptr->getWidth();
47     Box &r1=box;
48 
49     //r1和box共享同一段存储单元。也可以用子类对象初始化基类的引用变量
50     //r1和指针类型不同,box 和box*
51     r1.getWidth();
52     Box &r2=colorbox;
53     //派生类对象可以向基类对象的引用进行赋值或初始化
54     //但是不能调用子类的数据成员,此时基类引用并不是派生类对象的别名,也不与派生类共享同一段存储单元。
55     //它只是派生类中基类部分的别名,基类引用与派生类中基类部分共享同一段存储单元。0027F868
56     //0027F850
57     r2.getWidth();
58     cout<<&r2<<endl<<&box<<endl;
59 
60     return 0;
61 }

基类与派生类之间的转换,如果基类的对象想要访问子类的数据成员函数就要,去向下转型。