下面这段代码:
#include <iostream>
#include <string.h>
class parent
{
public:
virtual void who()
{
std::cout << "I am class Parent" << std::endl;
}
};
class son : public parent
{
public:
virtual void who() override /*final*/
{
std::cout << "I am class Son" << std::endl;
}
};
class daughter : public parent
{
public:
virtual void who() override /*final*/
{
std::cout << "I am class Daughter" << std::endl;
}
};
int main()
{
son *pmyson = new son;
daughter *pmydaughter = new daughter;
memcpy(pmydaughter, pmyson, sizeof(*pmyson));
std::cout << "---1----------" << std::endl;
pmyson->who();
pmydaughter->who();
std::cout << "---2----------" << std::endl;
(*pmyson).who();
(*pmydaughter).who();
//
parent *pmyson1 = new son;
parent *pmydaughter1 = new daughter;
memcpy(pmydaughter1, pmyson1, sizeof(*pmyson1));
std::cout << "---3----------" << std::endl;
pmyson1->who();
pmydaughter1->who();
std::cout << "---4----------" << std::endl;
(*pmyson1).who();
(*pmydaughter1).who();
//
son myson;
daughter mydaughter;
memcpy(&mydaughter, &myson, sizeof(myson));
std::cout << "---5----------" << std::endl;
myson.who();
mydaughter.who();
std::cout << "---6----------" << std::endl;
((parent*)(&myson))->who();
((parent*)(&mydaughter))->who();
return 0;
}
输出应该是什么呢?
学过C++,应该你会有自己的答案,但是vs运行一下,可能结果并不是你所想象的。
//输出:
---1----------
I am class Son
I am class Son
---2----------
I am class Son
I am class Son
---3----------
I am class Son
I am class Son
---4----------
I am class Son
I am class Son
---5----------
I am class Son
I am class Daughter
---6----------
I am class Son
I am class Son
那如果把注释掉的“
final”重新加上呢?
//输出:
---1----------
I am class Son
I am class Daughter
---2----------
I am class Son
I am class Daughter
---3----------
I am class Son
I am class Son
---4----------
I am class Son
I am class Son
---5----------
I am class Son
I am class Daughter
---6----------
I am class Son
I am class Son
作为一个需要不断学习温故的好学之士,我也搞不懂了。
另外,vs编译不过可以使用http://cpp.sh/试试哦。