问题1, 参数切割slicing
#include <string>
#include <iostream>
class Window
{
public:
Window() {
std::cout << "Window ctor called" << std::endl;
}
Window(const Window & win) {
m_name = win.m_name;
std::cout << "Window copy ctor called" << std::endl;
}
virtual ~Window() = default;
virtual void display() {
std::cout << "Window is displaying." << std::endl;
}
private:
std::string m_name;
};
class SubWindow : public Window
{
public:
SubWindow() {
std::cout << "SubWindow ctor called" << std::endl;
}
SubWindow(const SubWindow & subwin) {
m_color = subwin.m_color;
std::cout << "SubWindow copy ctor called" << std::endl;
}
~SubWindow() = default;
virtual void display() {
std::cout << "SubWindow is displaying." << std::endl;
}
private:
std::string m_color;
};
void Display(Window win) {
win.display();
}
int main()
{
Window win;
SubWindow subwin;
Display(subwin);
return 0;
}
问题2,额外调用(拷贝)构造函数和析构函数
#include <string>
#include <iostream>
class Window
{
public:
Window() {
std::cout << "Window ctor called" << std::endl;
}
Window(const Window & win) {
m_name = win.m_name;
std::cout << "Window copy ctor called" << std::endl;
}
virtual ~Window() = default;
virtual void display() {
std::cout << "Window is displaying." << std::endl;
}
private:
std::string m_name;
};
class SubWindow : public Window
{
public:
SubWindow() {
std::cout << "SubWindow ctor called" << std::endl;
}
SubWindow(const SubWindow & subwin) {
m_color = subwin.m_color;
std::cout << "SubWindow copy ctor called" << std::endl;
}
~SubWindow() = default;
virtual void display() {
std::cout << "SubWindow is displaying." << std::endl;
}
private:
std::string m_color;
};
void Display(SubWindow win) {
win.display();
}
int main()
{
Window win;
SubWindow subwin;
Display(subwin);
return 0;
}