| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1073 人关注过本帖
标题:我又来求助了:涉及到的知识:泛型编程,模板类,操作符重载,代码和问题在帖子里 ...
取消只看楼主 加入收藏
纯黑色
Rank: 1
等 级:新手上路
帖 子:347
专家分:0
注 册:2009-4-16
结帖率:91.43%
收藏
已结贴  问题点数:20 回复次数:8 
我又来求助了:涉及到的知识:泛型编程,模板类,操作符重载,代码和问题在帖子里面
代码如下:
程序代码:
#include <iostream>
#include <iterator>

 using namespace std;

 

 template <typename T>

 class complex

 {
     public:
         //complex(){real = 0;imag = 0;}
           complex(T oreal,T oimag)
        {
            real = oreal;
            imag = oimag;
        }
        //template<typename T2>
         complex operator+ (complex<T> c2)
         {
            c2.real=real+c2.real;
            c2.imag=imag+c2.imag;     
            return c2;    
         }
    public:
         inline T getReal(){return real;}
         inline T getImag(){return imag;}
     private:
     
         T real;
        T imag; 
         

 };

 

 namespace std
{ 
    template <typename T2>
    std::ostream& operator<< (std::ostream& os, const complex <T2> c)
     {
        return os<<c.getReal()<<"+"<<c.getImag()<<"i";    
     }

 }

 int main()

 {     
     complex<float> a(10,5);
     complex<float> b(2.2,6.0);
     complex<float> c=a+b;
     cout<<c<<"\n";
     return 0;

 }

报错信息:
        return os<<c.getReal()<<"+"<<c.getImag()<<"i";    discards qualifers

去掉const 就能执行,不去掉const就执行不了,求大神分析,对const的理解还不够好。
搜索更多相关主题的帖子: complex 知识 
2013-08-04 21:03
纯黑色
Rank: 1
等 级:新手上路
帖 子:347
专家分:0
注 册:2009-4-16
收藏
得分:0 
回复 3楼 rjsp
大神的代码没完全看明白,只看懂了一点,"+"的操作符重载这块写的比我自己写的省内存。
但是不明白为什么要把inclue 和using namespace 的位置调整成这样呢?想知道一些原理性的东西。
还希望不吝赐教。
2013-08-05 10:00
纯黑色
Rank: 1
等 级:新手上路
帖 子:347
专家分:0
注 册:2009-4-16
收藏
得分:0 
回复 5楼 peach5460
还望明示,实在看不出来加了什么,我就看到在重载"<<"的时候加了一个引用,我尝试了一下,依然编译通过不了,我用的编译环境是C-FREE 5.0.
2013-08-05 14:52
纯黑色
Rank: 1
等 级:新手上路
帖 子:347
专家分:0
注 册:2009-4-16
收藏
得分:0 
回复 7楼 rjsp
我可以理解成为数据类型不同造成的问题吗?
2013-08-05 15:26
纯黑色
Rank: 1
等 级:新手上路
帖 子:347
专家分:0
注 册:2009-4-16
收藏
得分:0 
回复 9楼 peach5460
受教了。恕我愚钝,刚开始一直没理解您的提示.
2013-08-05 16:11
纯黑色
Rank: 1
等 级:新手上路
帖 子:347
专家分:0
注 册:2009-4-16
收藏
得分:0 
回复 7楼 rjsp
const 写在函数名前面任何位置都不能编译,写在括号后面就可以正常运行,能帮我分析一下吗?拜谢.
2013-08-05 16:40
纯黑色
Rank: 1
等 级:新手上路
帖 子:347
专家分:0
注 册:2009-4-16
收藏
得分:0 
回复 13楼 peach5460
我问了半天goole,没有找到任何相对应的资料,但是看了很多关于const的介绍:
我的理解是这样的:
    通过const 修饰的变量,函数,类,类的成员函数都是不能被修改的。
举个例子:
    const int a;//a这个变量不能被修改.
    const int *a;(等价于int const *a)//a指针指向的变量不能修改.
    int *const a;//a指针的指向不能被修改.
    const int function(){}//function返回的值不能被修改.
    int function() const{}//funtion函数体里面的所有变量,函数,类都不能被修改.

因此当用const 实例化一个类的对象后,这个类的所有方法和属性都不能再被改变了.
所以类里面的非const修饰的函数体都会discard 掉.

不知道我这样理解正确吗?还望指出.

[ 本帖最后由 纯黑色 于 2013-8-5 17:15 编辑 ]
2013-08-05 17:07
纯黑色
Rank: 1
等 级:新手上路
帖 子:347
专家分:0
注 册:2009-4-16
收藏
得分:0 
回复 13楼 peach5460
您说的对啊,我深有感触,所以我现在每学一个知识点都会写一段验证代码.
2013-08-05 17:08
纯黑色
Rank: 1
等 级:新手上路
帖 子:347
专家分:0
注 册:2009-4-16
收藏
得分:0 
回复 16楼 peach5460
这样就通了,如果const 实例化一个类的对象的话,这个对象可以用的方法以及属性,必须是在这个类定义的时候用const修饰过的,否则的话就不能使用.

恍然大悟啊.
2013-08-05 17:37
快速回复:我又来求助了:涉及到的知识:泛型编程,模板类,操作符重载,代码和问题在 ...
数据加载中...
 
   



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

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