/*
復制構造函數:
對於一個類,如果程序中沒有定義復制構造函數,則編譯器會自動生成一個隱含的復制構造函數,這個隱含的復制構造函數會自動調用基類的復制構造函數,對派生類新增的成員對象一一執行復制。
*/
#include<iostream>
using namespace std;
class A
{
public:
A() //默認構造函數
{
i = 100;
cout << "類A默認構造函數" << endl;
}
A(const A&s) //復制構造函數
{
i = s.i;
cout << "類A復制構造函數" << endl;
}
int getValue(); //取值
void setValue(int); //設置值
private:
int i;
};
int A::getValue()
{
return i;
}
void A::setValue(int k)
{
i = k;
}
class B :public A //公有派生類
{
private:
float f;
public:
B()
{
f = 20.1;
cout << "類B默認構造函數" << endl;
}
B(const B &v) :A::A(v), f(v.f)
{
cout << "類B復制構造函數" << endl;
}
float getValue();
int getValue1()
{
return A::getValue();
}
};
float B::getValue() //重寫基類函數,改變了返回值類型
{
return f;
}
int main()
{
A a; //調用類A默認構造函數
B b; //調用類A默認構造函數、類B默認構造函數
B bb(b); //調用類A復制構造函數、類B復制構造函數
system("pause");
return 0;
}