effective c++ 记录之对象切割问题

今天看effective c++ 发现里面有句话不太理解"造成此对象的行为像个derived class对象"的那些特化性质全被切割掉了,仅仅留下一个base class对象"

总感觉这话听起来特别拗口,于是在程序里面大致实现了下 

window:父类

window_son:子类


代码如下:

window.h

</pre><pre name="code" class="html">#pragma once
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
class window
{
public:
	window(string str);
	
	string name();
	virtual string ShowWindow();
	~window(void);
	 string str2;
};
window.cpp

#include "window.h"

window::window(string str)
{
	str2 = "window";
}

window::~window(void)
{
}

string window::name()
{
	string str1;
	str1 = "this is "+str2;
	return str1;
}

string window::ShowWindow()
{
	string str;
	str = "show "+str2;// str = "show window"
	return str;
}

window_son.h

#pragma once
#include "window.h"

class window_son :
	public window
{
public:
	window_son(string str);
	~window_son(void);
	virtual string ShowWindow();
};

window_son.cpp

#include "window_son.h"

window_son::window_son(string str):window("window")
{
	str2 = "window_son";
}

window_son::~window_son(void)
{
}

string window_son::ShowWindow()
{
	string str;
	str = "show "+str2;//str = "show window_son"
	return str;
}
main

#include "window.h"
#include "window_son.h"


string getW(window w)
{
	return w.name();//return w.ShowWindow();
}
void main()
{
	window_son ws("son");
	cout<<getW(ws)<<endl;
	system("pause");
}

注意变量string str2.

虽然最终打印出来的是 this is window_son

但是其实还是调用的window中的函数name 而不是window_son继承过来的name

因为我们如果使用注释中的代码,会发现打印出来的是 "show window" 而不是"show window_son"

所以effective c++这本书中所谓的特化性质就是这个虚函数(动态绑定啊,没有使用绑定到子类中的函数)

而之前未注的代码 之所以打印出this is window_son是因为那个关键的继承变量str2. 也正因为他的非动态绑定(我想就算是切割,他本质也是window_son中的存储结构,故依然调用的是window_son中的str2,也从另一方面说了它不是动态绑定)。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值