下面的代碼中,本計劃在呼叫foo函式時采用引數"student_teacher",但當前的引數為 "student",編譯依然可以通過,請解釋其原因。如果希望在這種情況下,編譯能夠提示錯誤,要怎么修改類的定義,并解釋其原因。
#include <iostream>
using namespace std;
class CStudent
{
public: CStudent() {}; ~CStudent() {};
};
class CTeacher
{
public: CTeacher() {}; CTeacher(CStudent student) : m_student(student) { } ~CTeacher() {}; void Teach() {cout<<"teacher"<<endl;}
private: CStudent m_student;
};
void foo(CTeacher teacher)
{ teacher.Teach();
}
int main()
{ CStudent student; CTeacher student_teacher; foo(student);
}
uj5u.com熱心網友回復:
因為你的CTeacher有個拷貝建構式,它的引數是CStudent,意味著可以直接通過CTeacher t = student的方式拷貝出一個CTeacher物件(除非你多載=)。foo函式呼叫的時候先把實參拷貝給形參,就相當于發生了CTeacher t = student,所以函式可以通過。uj5u.com熱心網友回復:
那請問第二個問題呢uj5u.com熱心網友回復:
好幾種修改方法,把CTeacher的拷貝建構式去掉,或者把foo的引數改成指標的形式,或者多載=運算子轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/42749.html
標籤:C++ 語言
上一篇:二叉樹的建立問題
