#include <iostream>
using namespace std;
class A{
private:
int num;
public:
A(int num){
this->num = num;
}
void printA(){
cout<<"A "<<num<<endl;
}
};
template <class T>
class demostrate{
public:
demostrate(T* pObj = 0){
cout<<"default constructor"<<endl;
};
demostrate(const demostrate &demo){
cout<<"copy constructor";
}
//demostrate(demostrate<T> demo){};
demostrate& operator=(T *t);
};
template <class T>
demostrate<T>& demostrate<T>::operator=(T *t){
cout<<"operator overload"<<endl;
t->printA();
return *this;
}
class B{
public:
B(A* a){
a->printA();
cout<<"new A "<<endl;
}
B(int bint){
cout<<"bint "<<bint<<endl;
}
B(int a, int b, int c){
cout<<"output a,b,c "<<a<<b<<c<<endl;
}
};
int main(){
//第一種方法提示conversion from ‘A*’ to non-scalar type ‘demostrate<A>’ requested
//帶有聲明的對象初始化,實際上是調用構造函數,所以構造函數一定要有demostrate(T* pObj = 0)形參列表
demostrate<A> demo = new A(100);
/*
//第二種方法調用的是運算符重載方法
demostrate<A> demo;
demo = new A(100);
B b= new A(200);
B b2 = 300;
B b3 = {100, 200, 300};
*/
return 0;
}
在C++中,為構造函數指定實參有三種等價形式:
Account acct1("Anna Press");
Account acct2 = Account("Anna Press");
Account acct3 = "Anna Press";
acct3的形式只能被用于指定單個實參的情形,對于兩個以上的實參,只能使用acct1和acct2的形式,推薦acct1。
浙公網安備 33010602011771號