回 帖 发 新 帖 刷新版面

主题:这个类的这个形式该怎样解释?

#include <iostream>                           
#include "iomanip"
#include "string"
using namespace std;
class Cpoint
{  
  private:
  int x,y;
  public:
  Cpoint()
  {x=0;y=0;}// 每个都必须加上一个;;
  
  Cpoint(const Cpoint&p)//使用已经存在的Cpoint类型的对象u初始化新建立的对象V,
    {x=p.x;y=p.y;}     //在这种情况下,所谓的拷贝初始化构造函数被调用。
     void pri(int x,int y);
     void pri(int x);
};
void Cpoint::pri(int x,int y)
{ cout<<x<<setw(3)<<y;}
void Cpoint::pri(int x)
{cout<<x;}
void main()
{ int x,y;
 
 cin>>x>>y;
 const Cpoint p;// 建立一个对象为const型修饰,然后将它封入Cpoint中
 Cpoint st(p);// 现在这个x和y调用的其实就是p的的,其实p是先调用了这个中的x和y而导致的
    st.pri(x,y);
    cout<<endl;
    st.pri(x);
};
我想问的就是,我定义了一个const Cpoint p是不是这个p对象是先执行了一次构造函数,然后在赋值给新的对象?那么这个到底该怎么将啊,那么我调用的这个st.pri的参数是经过p转过来的还是直接传过来的?
谢各位了,,, 
][code=c]
请填写代码
[/code]

回复列表 (共3个回复)

沙发

我想说的是,你main里的x和y,以及类中pri方法的x和y,都跟类的私有属性没关系……
const Cpoint p的时候调用构造函数构造出p,然后Cpoint st(p)的时候调用拷贝构造函数将p的私有属性赋到st里,调用st的pri的时候参数是main里输入的,跟类的属性无关

板凳

恩,别人回答的,,我复制过来,大家都参观一下,,,
//源代码如下,调试输出在最后面注释里面 :

#include <iostream>                           
using namespace std;
 
class Cpoint
{  
private:
  //起名字,写法都不和规范
  int x_;
  int y_;

public:
 
     int X(void)const {return x_;}//为了作为读取私有变量的方法,const修饰,此函数不能改变
     // 私有变量的值,不能改变对象成员函数
     int Y(void)const {return y_;}//对,相当于你的内部变量对外接展示的一种通道和手法

    Cpoint(int a=0,int b=0):x_(a),y_(b){} 
    Cpoint(const Cpoint & p): x_(p.X()),y_(p.Y()){} //拷贝构造
    void pri(void){  cout << "x_=" <<x_ <<", y_=" << y_ << endl;}
};

int
main(void)

 

//  const Cpoint p;// 建立一个对象为const型修饰,然后将它封入Cpoint中
//    const 说明这里的变量是不可以修改的,你还怎么初始化??
  int x1,y1;
  cout<<endl<<"输入值"<<endl;
  cin>>x1>>y1;
  Cpoint p(x1,y1);
  Cpoint st(p); // 输入的是一个只读性质的引用参数 p 
  st.pri();

  return 0;
};

/*
Output: 
 
   x_=10, y_=20
 
*/

3 楼

我想说,私有属性的_一般更多地写在前面而不是后面

我来回复

您尚未登录,请登录后再回复。点此登录或注册