基类对象对派生类对象的切割问题
来源:互联网 发布:知乎 辐照食品 编辑:程序博客网 时间:2024/05/01 16:39
/*
* *基类对象对派生类对象的切割问题* *
程序输出:
By_Value_Display :Window.display
By_Reference_Display :WindowWithScrollBars.display
知识点:
*当一个derived class 对象以by value 方式传递并被视为一个base class 对象,base class 的拷贝构造函数
*会被调用,而“造成此对象的行为像个derived class 对象”的那些特化性质全被切割掉了,仅仅留下一个
*base class 对象,因为正是base class 构造函数建立了它。
*避免切割问题,可用 pass-by-reference-to-const 代替 pass-by-value。
*/
#include <iostream>
using namespace std;
class Window
{
public:
virtual void display() const { cout << "Window.display" << endl; };
};
class WindowWithScrollBars: public Window
{
public:
virtual void display() const { cout << "WindowWithScrollBars.display" << endl; };
};
void By_Value_Display(Window w)
{
w.display();
}
void By_Reference_Display(const Window& w)
{
w.display();
}
int main()
{
//调用
WindowWithScrollBars wwsb;
cout << "By_Value_Display :";
By_Value_Display(wwsb);
cout << "By_Reference_Display :";
By_Reference_Display(wwsb);
getchar();
}
- 基类对象对派生类对象的切割问题
- 区分“派生类对象”和“派生类”对基类成员的访问权限
- 派生类与派生类对象对基类成员的访问
- 类对象切割对虚函数调用的影响
- 类对象切割对虚函数调用的影响
- 派生类对基类成员的访问权限和派生类对象对基类成员的访问权限
- 派生类对象的构造
- 面向对象的派生类对象初始化
- 基类对象与派生类对象的使用关系
- 派生类的对象赋值给基类对象
- 对基类与派生类对象和指针赋值的小结
- 对基类与派生类对象和指针赋值的小结
- 对基类与派生类对象和指针赋值的小结
- 派生类对象对基类对象进行初始化或复制
- 关于通过不含虚析构函数的基类类型的指针删除派生类对象的问题
- 关于通过不含虚析构函数的基类类型的指针删除派生类对象的问题
- C++基类成员函数访问派生类对象的基类成员问题
- 关于派生类拷贝构造函数中使用基类私有类对象成员的问题
- 登录页的验证码
- 怎样在Access和MS Sql Server中使一列字段自动编号增加(如 id int 主键 这一列自动增加)
- Oracle的表空间quota详解(ORA-01536,ORA-01950)
- NSUserDefaults简介及使用
- C++编程隐蔽错误:error C2533: 构造函数不能有返回类型
- 基类对象对派生类对象的切割问题
- 50个超酷photoshop动作演示及下载
- 对session和cookie的一些理解二
- ORACLE单表去重[整理]
- Segments
- 关于GDI 对象的创建和释放
- Python的库和资源
- css 选择器 学习
- C++ clock()函数实现功能介绍