/*关于构造函数对象指针及是否调用构造函数的问题*/
#include<iostream>
using namespace std;
class Date {
public:
Date(){ ye=1; me=2; de=3;}
Date(int y,int m,int d);
void print();
private:
int ye;
int me;
int de;
};
void Date::print(){
cout<<ye;
}
/*Date::Date(int y,int m,int d){
this.y=y;
this.m=m;
this.d=d;
}*/
int main() {
Date d;
int i;
typedef Date * pdate;
/* pdate mydate[10];//正确,没有调用构造函数,因为定义了10个对象的指针
mydate[1]=&d;
mydate[1]->print();
以上定义mydate的语句也可以写成下面的方式,用指针的形式来定义
*/
pdate * mydate=new pdate[10];//也正确,在指针数组的每一个指针被重新赋值,以指向一个不同的Date对象。
/*这时可以写如下语句*/
/*
for(i=0;i<10;i++)
mydate[i]=new Date(y,m,d);
*/
mydate[1]=&d;
mydate[1]->print();
return 0;
}
内联函数
/*关于构造函数对象指针及是否调用构造函数的问题*/
#include<iostream>
using namespace std;
class Date {
public:
Date(){ ye=1; me=2; de=3;}
Date(int y,int m,int d);
void Set(int m,int d,int y) {/*内联成员函数的隐式表示*/
cout<<m<<" "<<d<<" "<<y<<endl;
}
void ok();
void print();
private:
int ye;
int me;
int de;
};
inline void Date::ok(){/*内联函数的显式声明*/
cout<<222<<endl;
}
/*内联函数定义在类的内部或者外部没有本质的区别*/
void Date::print(){
cout<<ye<<endl;
}
Date::Date(int y,int m,int d){
this->ye=y;
this->me=m;
this->de=d;
}
int main() {
Date d(2,3,4);
int i;
Date *pd=new Date;//定义指向对象的指针,并让它指向一个新建立的对象
pd->print();
pd->Set(11,11,11);
pd->ok();
return 0;
}
结果:1
11 11 11
222
默认构造函数的调用:
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
class Date{
public:
Date(string s);
Date(int y=2012,int m=9,int d=12);//默认参数的构造函数
void Print();
private:
int year;
int month;
int day;
};
Date::Date(int y,int m,int d) {
year=y;
month=m;
day=d;
}
Date::Date(string s) {
year=atoi(s.substr(0,4).c_str());
month=atoi(s.substr(5,2).c_str());
day=atoi(s.substr(7,2).c_str());
}
void Date::Print() {
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
int main(){
Date d1;//调用默认参数的构造函数
d1.Print();
Date d2("2012-2-23");
d2.Print();
}
结果:
2012-9-12
2012-2-23
-----------------------------
Process exited after 0.2264 s
请按任意键继续. . .