| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5048 人关注过本帖
标题:两个问题:1在类中调用另一个类对象,要不要值传递的问题 2有静态成员变量 ...
只看楼主 加入收藏
dqq123456
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
两个问题:1在类中调用另一个类对象,要不要值传递的问题 2有静态成员变量时,怎么用模板
#include <stdafx.h>
#include "iostream"
using namespace std;
第一个问题:在类中调用另一个类对象,要不要值传递的问题
class Point
{
public:
    Point(int xx=0,int yy=0){x=xx;y=yy;}
    Point(Point &p){x=p.x;y=p.y;}
    int GetX(){return x;}
    int GetY(){return y;}
private:
    int x,y;
};


class Distance
{
    Point p1,p2;
    float d;
public:
    Distance(){d=0;}
    Distance(Point &pp1,Point &pp2);
    float GetD(){return d;}
};

Distance::Distance(Point &pp1,Point &pp2):p1(pp1),p2(pp2)
{
    d=p1.GetX()-p2.GetX();
}

//Distance::Distance(Point &pp1,Point &pp2)
//{d=pp1.GetX()-pp2.GetX();}
//写成这样也能得到同样的结果。

//写成哪种更好?为什么?

int main()
{   
    Point p1(1,1),p2(2,2);
    Distance d2(p1,p2);
    cout<<d2.GetD()<<endl;
    return 0;
}
第二个问题:有静态成员变量时,怎么用模板
#include <stdafx.h>
#include "iostream"
using namespace std;

template <class T>
class Point
{
public:
    Point(T xx=0,T yy=0);
    T GetX(){return x;}
    T GetY(){return y;}
private:
    T x,y;
//    static int Num;
};
//int Point::Num=0;  
//不要这两句时,程序能运行。
//但是加上这两句后,
  //将int Point::Num=0;改为int Point<int>::Num=0;在模板T为int时能运行,
  //但T为float时(无论写成int Point<int>::Num=0;还是int Point<float>::Num=0;或者直接写int Point::Num=0;),程序都不能运行
//怎么解决?

template <class T>  
 Point<T>::Point(T xx,T yy)                  
{
    x=xx;y=yy;   
}



int main()
{   
    Point<float> p1(1,2);
    cout<<"("<<p1.GetX()<<","<<p1.GetY()<<")"<<endl;
    return 0;
}

我是新手,请教各位了~~
搜索更多相关主题的帖子: 变量 静态 模板 成员 对象 
2010-07-27 18:46
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:10 
第一个我觉得第一种好,要不然 p1, p2 谁来初始化?

第二个,如果你想写模版的还应该写成:
template <class T>
int Point<T>::Num = 0;

不然写成
int Point<int>::Num = 0;
不是用来初始使模版的,这是特化,就是说当 T 是 int 的时候是这样。其它的不管。

即使有两个都写也没是,当 T 是 int 的时候用的是下面的。其它是时候用上面的。
2010-07-27 21:51
mrlgy
Rank: 2
等 级:论坛游民
帖 子:5
专家分:14
注 册:2010-7-27
收藏
得分:10 
第一个问题:声明类时是不分配内存的,因此要通过要通过构造函数初始化子对象。
第二个问题:在初始化静态数据成员之前加上
template <class T>
float Point<T>::Num=0;//静态数据成员只能在类外初始化
2010-07-28 07:30
dqq123456
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-27
收藏
得分:0 
谢谢两位~~
第二个问题弄清楚了
但第一个问题还有点不懂:p1,p2是里面的成员,一定要初始化么
2010-07-28 23:18
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
看你这个类是怎么设计的了。其实如果只要记一个距离的话,去掉那两个成员也可以。
2010-07-28 23:42
dqq123456
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-27
收藏
得分:0 
恩,懂了,太感谢了
2010-07-30 11:06
快速回复:两个问题:1在类中调用另一个类对象,要不要值传递的问题 2有静态成员 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016346 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved