c++学习之赋值兼容规则
来源:互联网 发布:网络流行语2016搞笑 编辑:程序博客网 时间:2024/06/01 07:46
规则一:
派生类的对象可以给基类对象赋值(因为在继承的时候c继承了父类的信息,可以在进行了对象切片后给子类中相应的父类信息段赋值)
eg:
class base{public: base(){} ~base(){}public: int x;};class D : public base{public: D(){} ~D(){}public: int y;};int main(){ D d; base b; b = d; //用父类对象给派生类对象赋值,反过来不可以 return 0;}
规则二:
可以将一个派生类的对象的地址赋值给其基类的指针变量;
并且只能通过该指针访问派生类中的由基类继承来的隐藏对象,不能访问派生类的新成员;
eg:
class base{public: base(){} ~base(){}public: void show(){}public: int x;};class D : public base{public: D(){} ~D(){}public: void show(int){} void print(){}public: int y;};int main(){ D d; base b; base *pb; pb = &d; pb->show(); //此处访问的是父类的show方法(因为用的是父类的指针,所以只能访问父类的信息) pb->show(2); //错误,因为父类没有带参数的show()方法 }
规则三:
派生类对象可以初始化基类的引用; 引用就是一个别名;
并且这个别名只能包含派生类对象中由父类继承来的隐藏对象
class base{public: base(){} ~base(){}public: void show(){}public: int x;};class D : public base{public: D(){} ~D(){}public: void show(int){} void print(){}public: int y;};int main(){ D d; base b; base &pb = d; //派生类对象初始化基类的引用 pb.show(); //访问的是父类的show方法}
要想让其调用子类的方法就要在父类中将与子类的同名同参数,同返回值的方法加virtual关键字就可以调用子类的方法(也就是多态)
class base{public: base(){} ~base(){}public: virtual void show(){}public: int x;};class D : public base{public: D(){} ~D(){}public: void show(int){} void print(){}public: int y;};int main(){ D d; base b; base *pb; pb = &d; pb->show(); //调用的是子类的show方法(有了多态) base &bf = d; bf.show(); //调用的是子类的show方法(多态)}
2 0
- c++学习之赋值兼容规则
- 赋值兼容规则
- 赋值兼容规则
- 赋值兼容规则
- 赋值兼容规则
- 赋值兼容规则
- c++赋值兼容规则
- C++学习之赋值兼容规则以及在私有、保护继承下的强制转换
- 赋值兼容规则——学习c++笔记
- C++的赋值兼容规则
- [C++] 类型兼容规则
- [c++]基类对象作为函数参数(赋值兼容规则)
- C++赋值兼容规则和多态
- 赋值兼容规则及虚函数
- 基类指针赋值兼容规则
- 钻石继承、虚基类、赋值兼容规则
- 同名隐藏与赋值兼容规则
- C++ 同名隐藏和赋值兼容规则
- zzulioj--10465--最长匹配子串(栈模拟)
- 10倍效率的程序员的好习惯,你有几个?
- SSL 1230 战略游戏 树形dp
- Odd Even Linked List
- 【c语言】输出菱形图案
- c++学习之赋值兼容规则
- 链表和数组的区别
- POJ 3181 Dollar Dayz【递推 拆分存大数】
- 快速排序
- PHP经典抓取网络数据方法
- You have not concluded your merge (MERGE_HEAD exists)
- java 追加内容到文件末尾的几种常用方法
- 【c语言】输出平行四边形图案
- hihoCoder 1037 数字三角形