class Grade{
Grade *p;
Grade &r;
};
要初始化类中的数据成员
构造函数该如何写
如何定义该类的对象。
26 个解决方案
#1
class Grade
{
int a;
public:
Grade(int i=0):a(i){} 这两个就是构造函数
Grade(int j)
{a=j;}
};
int main()
{
Grade g; 这就是定义类的对象了
}
C++新手交流群 213961554
{
int a;
public:
Grade(int i=0):a(i){} 这两个就是构造函数
Grade(int j)
{a=j;}
};
int main()
{
Grade g; 这就是定义类的对象了
}
C++新手交流群 213961554
#2
如何定义该类的对象。
在类定义之前先声明下
我记得以前有人问过
在类定义之前先声明下
class Grade;
class Grade{
Grade *p;
Grade &r;
Grade():p(new Grade),r(*p){}
};
我记得以前有人问过
#3
class Grade{
Grade *p;
Grade &r;
Grade():p(new Grade),r(p);
};
#4
谢了,自己去实践下,
#5
应该是二楼的那样吧 r(*p);
#6
谢谢你
这种定义的的应用的主要用途在哪,
#7
我居然掉了个解析操作符,加上吧*!
#8
主要是在效率方面发挥作用!
#9
这个能用来定义对象吗,试了下怎么不行呢
#10
定义对象不行是什么意思啊
#11
Grade tmp;
std::cout<<sizeof(tmp)<<std::endl;
#12
你有没有把类的构造函数定义成public类型
#13
大哥,这个问题老早就发现了,改为public的也能通过编译,但一运行就不动了
#14
我发个完整的给你看看吧
class Grade;
class Grade{
Grade *p;
Grade &r;
public:
Grade():r(*this)
{
cout<<"无参构造函数调用"<<endl;
}
Grade(Grade *l):p(l),r(*p){
cout<<"有参构造函数调用"<<endl;
}
};
int main()
{
Grade *p=new Grade();
Grade *q=new Grade(p);
system("pause");
return 0;
}
#15
class Grade;
class Grade
{
Grade *p;
Grade &r;
public:
Grade():p(new Grade),r(*p){}
};
int main()
{
Grade tmp;//取消此行一切正常
cout<<sizeof(tmp)<<endl;
return 0;
}
#16
这样子写,程序会递归调用类的构造函数,你参考下我在14楼写的程序
#17
Grade():r(*this)//此时对象尚未构建完成,哪来的this呢?
{
cout<<"无参构造函数调用"<<endl;
}
#18
不知道这些有何用,能不能举个例子
#19
问题的关键是 正在定义的类中使用了 【new 类名】
#20
我调试了一下 你们所说的情况,就两种,
正在定义的类中含有该类的 指针成员时
一种是:用 new 一个新的的空间给 该指针
这种情况编译链接通过,运行通不过。
第二种是用this 指针赋值
这种情况能运行但有一个 waring提示:'this' : used in base member initializer list
正在定义的类中含有该类的 指针成员时
一种是:用 new 一个新的的空间给 该指针
class Grade; class Grade { Grade *p; Grade &r; public: Grade():p(new Grade),r(*p){} };
这种情况编译链接通过,运行通不过。
第二种是用this 指针赋值
class Grade;
class Grade{
Grade *p;
Grade &r;
public:
Grade():p(this),r(*p){
cout<<"构造函数调用"<<endl;
}
};
这种情况能运行但有一个 waring提示:'this' : used in base member initializer list
#21
调试代码:
class Grade;
class Grade {
Grade *p;
Grade &r;
public:
// Grade():p(new Grade),r(*p) //不可以
// Grade():p(NULL),r(*p) //可以
Grade():p(this),r(*p) //可以
{
}
};
int main()
{
Grade::Grade();
cout<<sizeof(Grade)<<endl; //
return 0;
}
#22
#23
感谢大家回帖。
结论:正在定义的类中不能 用new 为该类的指针申请空间?
开新贴讨论:正在定义的类中 成员函数能否用new 为该类类型的指针申请空间
结论:正在定义的类中不能 用new 为该类的指针申请空间?
开新贴讨论:正在定义的类中 成员函数能否用new 为该类类型的指针申请空间
#24
http://bbs.csdn.net/topics/390288431?page=1#post-392971651
#25
结贴:咯 感谢大家的指教
#26
看样子还很复杂
#1
class Grade
{
int a;
public:
Grade(int i=0):a(i){} 这两个就是构造函数
Grade(int j)
{a=j;}
};
int main()
{
Grade g; 这就是定义类的对象了
}
C++新手交流群 213961554
{
int a;
public:
Grade(int i=0):a(i){} 这两个就是构造函数
Grade(int j)
{a=j;}
};
int main()
{
Grade g; 这就是定义类的对象了
}
C++新手交流群 213961554
#2
如何定义该类的对象。
在类定义之前先声明下
我记得以前有人问过
在类定义之前先声明下
class Grade;
class Grade{
Grade *p;
Grade &r;
Grade():p(new Grade),r(*p){}
};
我记得以前有人问过
#3
class Grade{
Grade *p;
Grade &r;
Grade():p(new Grade),r(p);
};
#4
谢了,自己去实践下,
#5
应该是二楼的那样吧 r(*p);
#6
谢谢你
这种定义的的应用的主要用途在哪,
#7
我居然掉了个解析操作符,加上吧*!
#8
主要是在效率方面发挥作用!
#9
这个能用来定义对象吗,试了下怎么不行呢
#10
定义对象不行是什么意思啊
#11
Grade tmp;
std::cout<<sizeof(tmp)<<std::endl;
#12
你有没有把类的构造函数定义成public类型
#13
大哥,这个问题老早就发现了,改为public的也能通过编译,但一运行就不动了
#14
我发个完整的给你看看吧
class Grade;
class Grade{
Grade *p;
Grade &r;
public:
Grade():r(*this)
{
cout<<"无参构造函数调用"<<endl;
}
Grade(Grade *l):p(l),r(*p){
cout<<"有参构造函数调用"<<endl;
}
};
int main()
{
Grade *p=new Grade();
Grade *q=new Grade(p);
system("pause");
return 0;
}
#15
class Grade;
class Grade
{
Grade *p;
Grade &r;
public:
Grade():p(new Grade),r(*p){}
};
int main()
{
Grade tmp;//取消此行一切正常
cout<<sizeof(tmp)<<endl;
return 0;
}
#16
这样子写,程序会递归调用类的构造函数,你参考下我在14楼写的程序
#17
Grade():r(*this)//此时对象尚未构建完成,哪来的this呢?
{
cout<<"无参构造函数调用"<<endl;
}
#18
不知道这些有何用,能不能举个例子
#19
问题的关键是 正在定义的类中使用了 【new 类名】
#20
我调试了一下 你们所说的情况,就两种,
正在定义的类中含有该类的 指针成员时
一种是:用 new 一个新的的空间给 该指针
这种情况编译链接通过,运行通不过。
第二种是用this 指针赋值
这种情况能运行但有一个 waring提示:'this' : used in base member initializer list
正在定义的类中含有该类的 指针成员时
一种是:用 new 一个新的的空间给 该指针
class Grade; class Grade { Grade *p; Grade &r; public: Grade():p(new Grade),r(*p){} };
这种情况编译链接通过,运行通不过。
第二种是用this 指针赋值
class Grade;
class Grade{
Grade *p;
Grade &r;
public:
Grade():p(this),r(*p){
cout<<"构造函数调用"<<endl;
}
};
这种情况能运行但有一个 waring提示:'this' : used in base member initializer list
#21
调试代码:
class Grade;
class Grade {
Grade *p;
Grade &r;
public:
// Grade():p(new Grade),r(*p) //不可以
// Grade():p(NULL),r(*p) //可以
Grade():p(this),r(*p) //可以
{
}
};
int main()
{
Grade::Grade();
cout<<sizeof(Grade)<<endl; //
return 0;
}
#22
#23
感谢大家回帖。
结论:正在定义的类中不能 用new 为该类的指针申请空间?
开新贴讨论:正在定义的类中 成员函数能否用new 为该类类型的指针申请空间
结论:正在定义的类中不能 用new 为该类的指针申请空间?
开新贴讨论:正在定义的类中 成员函数能否用new 为该类类型的指针申请空间
#24
http://bbs.csdn.net/topics/390288431?page=1#post-392971651
#25
结贴:咯 感谢大家的指教
#26
看样子还很复杂