【发布时间】:2020-08-16 07:19:35
【问题描述】:
我目前正在学习 c++ 的面向对象特性。我写了一段代码来测试继承和多态是如何工作的。 以下是部分代码:
class Person
{
public:
Person()
{
cout << "Person constructed\n";
}
virtual void introduce()
{
cout << "hi from person" << endl;
}
~Person()
{
cout << "Person destructed\n";
}
};
class Student : public Person
{
public:
Student()
{
cout << "Student constructed\n";
}
void introduce()
{
cout << "hi from student" << endl;
}
~Student()
{
cout << "Student destructed\n";
}
};
class Farmer : public Person
{
public:
Farmer()
{
cout << "Farmer constructed\n";
}
void introduce()
{
cout << "hi from farmer" << endl;
}
~Farmer()
{
cout << "Farmer destructed\n";
}
};
class SJW : public Student
{
public:
SJW()
{
cout << "SJW constructed\n";
}
~SJW()
{
cout << "SJW destructed\n";
}
};
void whoisthis3(Person object)
{
object.introduce();
}
int main()
{
Student mark;
SJW bigred;
Farmer max;
cout << endl;
whoisthis3(mark);
whoisthis3(max);
whoisthis3(bigred);
cout << endl;
return 0;
}
这是它产生的输出:
Person constructed
Student constructed
Person constructed
Student constructed
SJW constructed
Person constructed
Farmer constructed
hi from person
Person destructed
hi from person
Person destructed
hi from person
Person destructed
Farmer destructed
Person destructed
SJW destructed
Student destructed
Person destructed
Student destructed
Person destructed
这些派生类按预期在开始和结束时被构造和销毁。但是,当 whoisthis3 方法执行时,怎么会调用 Person 析构函数呢?那里发生了什么?
【问题讨论】:
-
复制构造函数被调用,它不打印任何东西,因为它只是默认值。
-
我还不太明白。那里需要一个复制构造函数?
-
将 whoisthis3 例程更改为:
void whoisthis3(Person& object) -
我知道,该功能有 3 个变体,其中之一就是您提到的。不过我这里没有包括其他的。
-
然后为你的类实现一个拷贝构造函数和赋值运算符
标签: c++ oop destructor copy-constructor virtual-destructor