由一个类构造一个对象有多种构造方式,以下代码展示各种构造方式:
class
Int
... {
public:
Int()
...{
cout << "Default Constructor" << endl;
}
Int(int a) : a_(a)
...{
cout << "Direct Constructor" << endl;
}
Int(const Int& other)
...{
cout << "Copy Constructor" << endl;
a_ = other.a_;
}
Int& operator =(const Int& other)
...{
cout << "Copy Assign Operator" << endl;
a_ = other.a_;
return *this;
}
private:
int a_;
} ;
int main( int argc, char * argv[])
... {
int u = 10;
cout << "Int t1: ";
Int t1;
cout << "Int t2(): Prototyped Function" << endl;
Int t2();
cout << "Int t3(u): ";
Int t3(u);
cout << "Int t4 = u: ";
Int t4 = u;
cout << "Int t5(t4): ";
Int t5(t4);
cout << "Int t6 = t4: ";
Int t6 = t4;
cout << "t1 = t4: ";
t1 = t4;
return getchar();
}
... {
public:
Int()
...{
cout << "Default Constructor" << endl;
}
Int(int a) : a_(a)
...{
cout << "Direct Constructor" << endl;
}
Int(const Int& other)
...{
cout << "Copy Constructor" << endl;
a_ = other.a_;
}
Int& operator =(const Int& other)
...{
cout << "Copy Assign Operator" << endl;
a_ = other.a_;
return *this;
}
private:
int a_;
} ;
int main( int argc, char * argv[])
... {
int u = 10;
cout << "Int t1: ";
Int t1;
cout << "Int t2(): Prototyped Function" << endl;
Int t2();
cout << "Int t3(u): ";
Int t3(u);
cout << "Int t4 = u: ";
Int t4 = u;
cout << "Int t5(t4): ";
Int t5(t4);
cout << "Int t6 = t4: ";
Int t6 = t4;
cout << "t1 = t4: ";
t1 = t4;
return getchar();
}
下面是运行后的结果:
Int t1: Default Constructor
Int t2(): Prototyped Function
Int t3(u): Direct Constructor
Int t4 = u: Direct Constructor
Int t5(t4): Copy Constructor
Int t6 = t4: Copy Constructor
t1 = t4: Copy Assign Operator