现在我还是一个本科大二的学生,前些阵子写作业的时候遇到了这个问题,花了很久才解决的,对于大神这一定就是神经回路里面的应有内容,不过我还是决定把这个作为我博客的第一条。
内容就是:
#include <iostream>
using namespace std;
class Point
{
public:
int X;
Point(){
X=20;
cout<<"constructor"<<endl;
}
Point(int xx){
X=xx;
cout<<"constructor 2"<<endl;
}
Point(Point &p){
X=p.X;
cout<<"constructor 3"<<endl;
}
};
class A{
public:
Point *po=new Point;
};
int main()
{
cout<<endl<<"A demo:"<<endl;
A demo; //声明一个类,会执行构造函数
cout<<endl<<"A* demo2:"<<endl;
A * demo2; //声明一个指向类的指针,不会执行构造函数
cout<<endl<<"Point demo3:"<<endl;
Point demo3; //声明一个类,会执行构造函数
cout<<endl<<"Point * demo4(demo.po):"<<endl;
Point * demo4(demo.po); //声明一个指向类的指针,不会执行构造函数
cout<<endl<<"Point demo6(30):"<<endl;
Point demo5(30); //声明对象时用一般构造函数,则只执行一般构造函数
cout<<endl<<"Point demo5(*demo4):"<<endl;
Point demo6(*demo4); //声明对象时用复制构造函数,则只执行复制构造函数
cout<<endl<<"Point *demo7 = new Point:"<<endl;
Point *demo7 = new Point; //声明指针的时候用这种形式才会有对象,从而调用构造函数
return 0;
}
上面的代码执行效果如下
当时写的一个数据结构里面BST的应用,试了很久,BST根本不能起作用,后来研究了很久,才发现,在BST的public里面我的所有成员变量都是指针形式,所以我就全部替换成了BSTNode *A = new BSTNode,这样我才成功地调用了构造函数,写完了作业,这个错误耽误了我一个星期的时间,其间每天起早贪黑。。。现在我很伤心。。。