| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3989 人关注过本帖
标题:请问C++类能定义属性吗
只看楼主 加入收藏
billvb
Rank: 2
等 级:论坛游民
帖 子:9
专家分:34
注 册:2013-1-21
结帖率:0
收藏
 问题点数:0 回复次数:8 
请问C++类能定义属性吗
请问C++类能定义属性吗,像get let那样,设置属性执行let函数,读取属性执行get函数?
搜索更多相关主题的帖子: 函数 
2013-01-21 12:00
Johnsonzhen
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:41
专家分:108
注 册:2013-1-19
收藏
得分:0 
目测可以。
2013-01-21 12:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不可以

授人以渔,不授人以鱼。
2013-01-21 12:03
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
重载神马的

貌似你问错地方了。。
2013-01-21 12:07
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
getter 和 setter吧。

当然有啊,比如:
程序代码:
class X {
public:
    void setA(int i)
    {
        a = i;
    }
    int getA()
    {
        return a;
    }
private:
    int a;
};

getA和setA都是inline,比函数调用的效率高。

My life is brilliant
2013-01-21 12:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
那只是函数模仿,而属性本身是可以作左值的,函数实现方式不能是左值。

授人以渔,不授人以鱼。
2013-01-21 13:33
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
c++没属性
c#有

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-01-21 13:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
C++之父自己说了,他曾考虑过是否需要让C++支持属性,但最终决定不支持。所以不用说在C++中怎么实现属性,但可以尽量模仿,终究是模仿而已。真正的问题是:你是否真的需要在C++中使用属性?这才是C++之父作那个决定的原因。

授人以渔,不授人以鱼。
2013-01-21 13:53
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 6楼 TonyDeng
在面向对象里,属性表示的是一个对象的状态,既然是状态那么肯定是用来获取或设置的。

在Java里,为了避免外界对属性的直接访问,从而建议程序员对于每个属性,都应该提供getter和setter来保护。
在C#里,为了更直接和方便的处理属性这一字段,从而提供了“属性”这一特殊语法,当然也必须提供getter或setter:
程序代码:
class X {
    private int a;
    public int A {
        get { return a; }
        set { a = value; }     
    }
    static void Main()
    {
        X x = new X();
        x.A = 1;
        int i = x.A;
    }
}

x.A = 1; // 看起来像是给一个字段赋值,但其实还是调用了setter
int i = x.A; // 同样通过getter来把值赋值给i

就我5楼的代码里,也只是按照Java那样的风格来写的getter和setter,C#让一个变量看起来像左值,但其实还是调用了方法。

My life is brilliant
2013-01-21 18:50
快速回复:请问C++类能定义属性吗
数据加载中...
 
   



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

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