c++在 正在定义的类 定义该类的引用如何写构造函数

时间:2021-02-21 16:41:27
如类:
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

#2


如何定义该类的对象。
在类定义之前先声明下

class Grade;
class Grade{

Grade  *p;
Grade   &r;
Grade():p(new Grade),r(*p){}
};

我记得以前有人问过 c++在 正在定义的类 定义该类的引用如何写构造函数

#3



class Grade{
  
      Grade  *p;
      Grade   &r;
      Grade():p(new Grade),r(p);
};

#4


谢了,自己去实践下,

#5


引用 3 楼 ganpengjin1 的回复:
C/C++ code?



12345678

class Grade{           Grade  *p;       Grade   &r;       Grade():p(new Grade),r(p); };

应该是二楼的那样吧  r(*p);

#6


引用 2 楼 anhuizhuanjiao 的回复:
如何定义该类的对象。
在类定义之前先声明下


C/C++ code?



12345678

class Grade; class Grade{       Grade  *p;     Grade   &r;     Grade():p(new Grade),r(*p){} };
我记得以前有人问过


谢谢你
这种定义的的应用的主要用途在哪,

#7


引用 5 楼 gourideriben 的回复:
引用 3 楼 ganpengjin1 的回复:C/C++ code?



12345678

class Grade{           Grade  *p;       Grade   &r;       Grade():p(new Grade),r(p); };
应该是二楼的那样吧  r(*p);

我居然掉了个解析操作符,加上吧*! c++在 正在定义的类 定义该类的引用如何写构造函数

#8


引用 6 楼 gourideriben 的回复:
引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下


C/C++ code?



12345678

class Grade; class Grade{       Grade  *p;     Grade   &r;     Grade():p(new Grade),r(*p){} };……

主要是在效率方面发挥作用!

#9


引用 2 楼 anhuizhuanjiao 的回复:
如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class Grade;class Grade{     Grade  *p;    Grade   &r;    Grade():p(new Grade),r(*p){}};
我记得以前有人问过

这个能用来定义对象吗,试了下怎么不行呢

#10


引用 9 楼 zhw952 的回复:
引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class Grade;class Grade{     Grade  *p;    Grade   &r;    Grade():p(new Grade),r(*p){}};
我记得以前有人问过
这个能用来定义对象……

定义对象不行是什么意思啊

#11


引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class Grade;class Grade{     Grade  *p;    Grade   &r;    Grade():p(new Grade),r(*p){}};……


Grade tmp;
std::cout<<sizeof(tmp)<<std::endl;

#12


引用 11 楼 zhw952 的回复:
引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class Grade;class Grade{     Grade  *p;    Grade   &amp;amp;amp;amp;r;    Grade():p(……

你有没有把类的构造函数定义成public类型

#13


引用 12 楼 anhuizhuanjiao 的回复:
引用 11 楼 zhw952 的回复:引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class Grade;class Grade{     Grade  *p;    Grade   &……


大哥,这个问题老早就发现了,改为public的也能通过编译,但一运行就不动了

#14


引用 13 楼 zhw952 的回复:
引用 12 楼 anhuizhuanjiao 的回复:引用 11 楼 zhw952 的回复:引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class Grade;class Grade{ ……

我发个完整的给你看看吧

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


引用 14 楼 anhuizhuanjiao 的回复:
引用 13 楼 zhw952 的回复:引用 12 楼 anhuizhuanjiao 的回复:引用 11 楼 zhw952 的回复:引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class ……


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


引用 15 楼 zhw952 的回复:
引用 14 楼 anhuizhuanjiao 的回复:引用 13 楼 zhw952 的回复:引用 12 楼 anhuizhuanjiao 的回复:引用 11 楼 zhw952 的回复:引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下……

这样子写,程序会递归调用类的构造函数,你参考下我在14楼写的程序

#17



 Grade():r(*this)//此时对象尚未构建完成,哪来的this呢?
     {
         cout<<"无参构造函数调用"<<endl;
  
     }

#18


引用 14 楼 anhuizhuanjiao 的回复:
引用 13 楼 zhw952 的回复:引用 12 楼 anhuizhuanjiao 的回复:引用 11 楼 zhw952 的回复:引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class ……


不知道这些有何用,能不能举个例子 c++在 正在定义的类 定义该类的引用如何写构造函数

#19


引用 15 楼 zhw952 的回复:
引用 14 楼 anhuizhuanjiao 的回复:
引用 13 楼 zhw952 的回复:引用 12 楼 anhuizhuanjiao 的回复:引用 11 楼 zhw952 的回复:引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ cod……

问题的关键是 正在定义的类中使用了 【new 类名】

#20


我调试了一下  你们所说的情况,就两种,

正在定义的类中含有该类的  指针成员时
一种是:用 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


该回复于2012-11-20 20:47:27被管理员删除

#23


感谢大家回帖。
结论:正在定义的类中不能 用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

#2


如何定义该类的对象。
在类定义之前先声明下

class Grade;
class Grade{

Grade  *p;
Grade   &r;
Grade():p(new Grade),r(*p){}
};

我记得以前有人问过 c++在 正在定义的类 定义该类的引用如何写构造函数

#3



class Grade{
  
      Grade  *p;
      Grade   &r;
      Grade():p(new Grade),r(p);
};

#4


谢了,自己去实践下,

#5


引用 3 楼 ganpengjin1 的回复:
C/C++ code?



12345678

class Grade{           Grade  *p;       Grade   &amp;r;       Grade():p(new Grade),r(p); };

应该是二楼的那样吧  r(*p);

#6


引用 2 楼 anhuizhuanjiao 的回复:
如何定义该类的对象。
在类定义之前先声明下


C/C++ code?



12345678

class Grade; class Grade{       Grade  *p;     Grade   &amp;r;     Grade():p(new Grade),r(*p){} };
我记得以前有人问过


谢谢你
这种定义的的应用的主要用途在哪,

#7


引用 5 楼 gourideriben 的回复:
引用 3 楼 ganpengjin1 的回复:C/C++ code?



12345678

class Grade{           Grade  *p;       Grade   &amp;amp;r;       Grade():p(new Grade),r(p); };
应该是二楼的那样吧  r(*p);

我居然掉了个解析操作符,加上吧*! c++在 正在定义的类 定义该类的引用如何写构造函数

#8


引用 6 楼 gourideriben 的回复:
引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下


C/C++ code?



12345678

class Grade; class Grade{       Grade  *p;     Grade   &amp;amp;r;     Grade():p(new Grade),r(*p){} };……

主要是在效率方面发挥作用!

#9


引用 2 楼 anhuizhuanjiao 的回复:
如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class Grade;class Grade{     Grade  *p;    Grade   &amp;r;    Grade():p(new Grade),r(*p){}};
我记得以前有人问过

这个能用来定义对象吗,试了下怎么不行呢

#10


引用 9 楼 zhw952 的回复:
引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class Grade;class Grade{     Grade  *p;    Grade   &amp;amp;r;    Grade():p(new Grade),r(*p){}};
我记得以前有人问过
这个能用来定义对象……

定义对象不行是什么意思啊

#11


引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class Grade;class Grade{     Grade  *p;    Grade   &amp;amp;amp;r;    Grade():p(new Grade),r(*p){}};……


Grade tmp;
std::cout<<sizeof(tmp)<<std::endl;

#12


引用 11 楼 zhw952 的回复:
引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class Grade;class Grade{     Grade  *p;    Grade   &amp;amp;amp;amp;r;    Grade():p(……

你有没有把类的构造函数定义成public类型

#13


引用 12 楼 anhuizhuanjiao 的回复:
引用 11 楼 zhw952 的回复:引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class Grade;class Grade{     Grade  *p;    Grade   &……


大哥,这个问题老早就发现了,改为public的也能通过编译,但一运行就不动了

#14


引用 13 楼 zhw952 的回复:
引用 12 楼 anhuizhuanjiao 的回复:引用 11 楼 zhw952 的回复:引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class Grade;class Grade{ ……

我发个完整的给你看看吧

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


引用 14 楼 anhuizhuanjiao 的回复:
引用 13 楼 zhw952 的回复:引用 12 楼 anhuizhuanjiao 的回复:引用 11 楼 zhw952 的回复:引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class ……


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


引用 15 楼 zhw952 的回复:
引用 14 楼 anhuizhuanjiao 的回复:引用 13 楼 zhw952 的回复:引用 12 楼 anhuizhuanjiao 的回复:引用 11 楼 zhw952 的回复:引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下……

这样子写,程序会递归调用类的构造函数,你参考下我在14楼写的程序

#17



 Grade():r(*this)//此时对象尚未构建完成,哪来的this呢?
     {
         cout<<"无参构造函数调用"<<endl;
  
     }

#18


引用 14 楼 anhuizhuanjiao 的回复:
引用 13 楼 zhw952 的回复:引用 12 楼 anhuizhuanjiao 的回复:引用 11 楼 zhw952 的回复:引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ code?12345678class ……


不知道这些有何用,能不能举个例子 c++在 正在定义的类 定义该类的引用如何写构造函数

#19


引用 15 楼 zhw952 的回复:
引用 14 楼 anhuizhuanjiao 的回复:
引用 13 楼 zhw952 的回复:引用 12 楼 anhuizhuanjiao 的回复:引用 11 楼 zhw952 的回复:引用 10 楼 anhuizhuanjiao 的回复:
引用 9 楼 zhw952 的回复:引用 2 楼 anhuizhuanjiao 的回复:如何定义该类的对象。
在类定义之前先声明下
C/C++ cod……

问题的关键是 正在定义的类中使用了 【new 类名】

#20


我调试了一下  你们所说的情况,就两种,

正在定义的类中含有该类的  指针成员时
一种是:用 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


该回复于2012-11-20 20:47:27被管理员删除

#23


感谢大家回帖。
结论:正在定义的类中不能 用new 为该类的指针申请空间?   

开新贴讨论:正在定义的类中 成员函数能否用new 为该类类型的指针申请空间

#24


http://bbs.csdn.net/topics/390288431?page=1#post-392971651

#25


结贴:咯 感谢大家的指教

#26


看样子还很复杂