设为首页 加入收藏

TOP

基类对象对派生类对象的切割问题
2014-11-23 19:02:06 】 浏览:5851
Tags:对象 派生 切割 问题

/*
* *基类对象对派生类对象的切割问题* *
程序输出:
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
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();

}

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VC++查找替换对话框 下一篇VC中字符串换行

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目