1.(2005年计算机二级考试)
#include<iostream>
using namespace std;
class Demo
{
public:
Demo(){cout<<"default constructor"<<endl;}
Demo(const Demo &x){cout<<"copy constructor"<<endl;}
};
Demo userCode(Demo b)//调用了一次Demo(const Demo &x)
{
Demo c(b);//调用了一次Demo(const Demo &x)
return c;//在return之前会自动析构,所以要想返回就又调用了一次Demo(const Demo &x),但由于编译器的优化我的codeblock运行结果显示不出来,而在vc上运行好像是可以显示出来的
}
int main()
{
Demo a,d;//调用了两次Demo()
d=userCode(a);
return 0;
}
题目:构造函数Demo()和Demo(const Demo &x)分别调用了(2)次和(3)次
运行结果:(两次和两次的原因在上文中说到,copy constructor应有三次)
default constructor
default constructor
copy constructor
copy constructor
#include<iostream>
using namespace std;
class Demo
{
public:
Demo(){cout<<"default constructor"<<endl;}
Demo(const Demo &x){cout<<"copy constructor"<<endl;}
};
Demo userCode(Demo b)//调用了一次Demo(const Demo &x)
{
Demo c(b);//调用了一次Demo(const Demo &x)
return c;//在return之前会自动析构,所以要想返回就又调用了一次Demo(const Demo &x),但由于编译器的优化我的codeblock运行结果显示不出来,而在vc上运行好像是可以显示出来的
}
int main()
{
Demo a,d;//调用了两次Demo()
d=userCode(a);
return 0;
}
题目:构造函数Demo()和Demo(const Demo &x)分别调用了(2)次和(3)次
运行结果:(两次和两次的原因在上文中说到,copy constructor应有三次)
default constructor
default constructor
copy constructor
copy constructor
2.(2005年计算机二级考试)
类的每个非静态成员函数都有this指针,静态成员函数无this指针
类的非静态成员函数访问数据成员时,隐含是以"this->数据成员名"的形式访问的
#include<iostream>
#include<string>
using namespace std;
class Student
{
private:
string name;
public:
Student(string Name)
{
this->name=Name;//将this->去掉是相同滴
}
string getname()
{
return name;
}
void show()
{cout<<getname()<<endl;}
};
int main()
{
Student s("aaa");
s.show();
}
3.
在主函数中(是否生成对象)
int main()
{
MyClass p1;//新对象,调用构造函数
MyClass *p2;//无对象,不调用构造函数
p2= new MyClass ("X");//新对象,调用带参数的构造函数
}
或者:
MyClass a,b[2],*p[2];//其中*p[2]是指针,地址指向对象,但本身不是对象,所以不调用构造函数
4.(易错点,动态申请空间后的运用)
int main()
{
MyClass *p=new MyClass();
(*p).Print();
return 0;
}