保护对象2017年是什么生肖年?

那些动物是国家特级保护对象。
那些动物是国家特级保护对象。
我国没有特级保护动物,只有一级二级之分野生动物保护法》第九条将国家重点保护野生动物划分为国家一级保护动物和国家二级保护动物两种,并在其他条文中规定了不同的管理措施,但它们的法律地位是相同的。《国家重点保护野生动物名录》已于日经国务院批准,日由林业部、农业部发布施行。名录中列入陆生野生动物330多种,其中,国家一级保护陆生野生动物有大熊猫、金丝猴、长臂猿、丹顶鹤等共90多种;国家二级保护陆生野生动物有小熊猫、穿山甲、黑熊、天鹅、鹦鹉等共230多种。动物名称和分类 保护级别 备注 灵长目——懒猴科 所有种 I 我国有蜂猴(懒猴)和小蜂猴(小懒猴)两种 灵长目——猴科 短尾猴(红面猴) II 熊猴 I 可能降为II级 台湾猴 I 猕猴 II 豚尾猴 I 可能降为II级 藏酋猴(毛面短尾猴) II 叶猴(所有种) I 我国有长尾叶猴,黑叶猴(包括其亚种白头叶猴),白臀叶猴(可能已灭绝或本不存在) 金丝猴(所有种) I 我国有金丝猴,滇金丝猴,黔金丝猴三种或三亚种 灵长目——长臂猿科 所有种 I 我国有白掌长臂猿,白眉长臂猿,黑冠长臂猿(包括其亚种白颊长臂猿) 鳞甲目——鲮鲤科 穿山甲(鲮鲤) II 可能升为I级 食肉目——犬科 豺(豺狗) II 豺这个词有时指我国的豺狗,有时只非洲的胡狼 食肉目——熊科 黑熊 II 棕熊 II 包括其亚种马熊,或被定为独立的种 马来熊 I 食肉目——大熊猫科 大熊猫 I 食肉目——浣熊科 小熊猫 I 食肉目——鼬科 石貂 II 紫貂 I 黄喉貂(青鼬,密狗) II 貂熊(狼獾) I 水獭(所有种) II 小爪水獭 II 食肉目——灵猫科 斑林狸 II 大灵猫 II 小灵猫 II 熊狸 I 食肉目——猫科 欧洲野猫(草原斑猫) II 荒漠猫 II 丛林猫 II 金猫 II 渔猫 II 兔狲 II 猞猁 II 云豹 I 豹 I 虎 I 雪豹 I 啮齿目——松鼠科 巨松鼠 II 啮齿目——河狸科 河狸 I 鳍脚目 所有种 II 我国有大齿港海豹和髭海豹,偶见海狗 海牛目——儒艮科 儒艮 I 鲸目——海豚科 中华白海豚 I 其它所有鲸类 II 共约28种 鲸目——淡水豚科 白鱀豚(白鳍豚) I 长鼻目——象科 亚洲象 I 奇蹄目——马科 蒙古野驴 I 西藏野驴 I 普氏野马 I 野生的已灭绝 偶蹄目——骆驼科 野骆驼 I 偶蹄目——鼷鹿科 小鼷鹿(马来鼷鹿) I 偶蹄目——鹿科 麝(所有种) II 共5种或亚种,可能升为I级 黑麂(毛额黄麂) I
白唇鹿 I 马鹿 II 包括白臀鹿 眉杈鹿(海南坡鹿) I 梅花鹿 I 水鹿 II 豚鹿 I 在我国可能已经灭绝 麋鹿(四不象鹿) I 野生的已灭绝 驼鹿 II 偶蹄目——牛科 白肢野牛 I 野牦牛 I 黄羊 II 普氏原羚(蒙原羚) I 藏原羚 II 鹅喉羚 II 藏羚 I 高鼻羚羊(赛加羚羊) I 在我国可能已经灭绝 扭角羚(羚牛) I 我国4亚种 鬣羚(苏门羚) II 台湾鬣羚(日本鬣羚) I 台湾鬣羚为日本鬣羚的亚种,也有人认为其是独立的种 赤斑羚
北山羊 I 可能降为II级 岩羊 II 盘羊 II 可能升为I级 兔形目——兔科 海南兔 II 雪兔 II 塔里木兔 II 鸊鷉目——鸊鷉科 角鸊鷉 II 赤颈鸊鷉 II 鹱形目——信天翁科 短尾信天翁 I 鹈形目——鹈鹕科 所有种 II 我国有白鹈鹕和班嘴鹈鹕(包括卷羽鹈鹕) 鹈形目——鲣鸟科 所有种 II 我国有褐鲣鸟和红脚鲣鸟 鹈形目——鸬鹚科 海鸬鹚 II 黑颈鸬鹚 II 鹈形目——军舰鸟科 白腹军舰鸟 I 鹳形目——鹭科 黄嘴白鹭 II 岩鹭 II 海南虎班鳱 II 小苇鳱 II 鹳形目——鹳科 彩鹳 II 白鹳 I 黑鹳 I 鹳形目——鹮科 白鹮 II 黑鹮 II 朱鹮 I 彩鹮 II 白琵鹭 II 黑脸琵鹭 II 可能升为I级 雁形——鸭科 红胸黑雁 II 白额雁 II 天鹅(所有种) II 我国有大、小天鹅(短嘴天鹅)和疣鼻天鹅(哑天鹅)三种 鸳鸯 II 中华秋沙鸭 I 隼形目——鹰科 金雕 I 白肩雕 I 玉带海雕 I 白尾海雕 I 虎头海雕 I 拟兀鹫 I 胡兀鹫 I 其它所有种 II 共约39种,其中白腹海雕可能升为I级 隼形目——隼科 所有种 II 我国11种,其中猎隼,矛隼,游隼和阿尔泰隼等可能升为I级 鸡形目——松鸡科 细嘴松鸡 I 黑琴鸡 II 柳雷鸟 II 岩雷鸟 II 镰翅鸡 II 花尾榛鸡 II 斑尾榛鸡 II 鸡形目——雉科 雪鸡(所有种) II 有暗腹雪鸡和淡暗腹雪鸡两种 雉鹑 I 四川山鹧鸪 I 海南山鹧鸪 I 血雉 II 黑头角雉 I 红胸角雉 I 灰头角雉 I 黄腹角雉 I 红腹角雉 II 虹雉(所有种) I 有绿尾虹雉,棕尾虹雉和白尾稍虹雉三种 藏马鸡 II 蓝马鸡 II 褐马鸡 I 黑鹇 II 白鹇 II 蓝鹇 I 原鸡 II 勺鸡 II 白冠长尾雉 II 可能升为I级 白颈长尾雉 I 黑颈长尾雉 I 黑长尾雉 I 锦鸡(所有种) II 有白腹锦鸡和红腹锦鸡两种 孔雀雉 I 绿孔雀 I 鹤形目——鹤科 灰鹤 II 黑颈鹤 I 白头鹤 I 沙丘鹤(加拿大鹤) II 丹顶鹤 I 白枕鹤 II 可能升为I级 白鹤 I 赤颈鹤 I 蓑羽鹤 II 鹤形目——秧鸡科 长脚秧鸡 II 姬田鸡 II 棕背田鸡 II 花田鸡 II 鹤形目——鸨科 II 所有种 I 我国有大、小鸨和波斑鸨三种 鸻形目——雉鸻科 铜翅水雉 II 鸻形目——鹬科 小杓鹬 II 小青脚鹬 II 鸻形目——燕鸻科 灰燕鸻 II 鸥形目——鸥科 遗鸥 I 小鸥 II 有的分类认为鸥类属于鸻形目 黑浮鸥 II 黄嘴河燕鸥 II 黑嘴端凤头燕鸥 II 鸽形目——沙鸡科 黑腹沙鸡 II 鸽形目——鸠鸽科 鹃鸠(所有种) II 我国有斑尾鹃鸠,乌鹃鸠和棕头鹃鸠三种 黑颏果鸠 II 皇鸠(所有种) II 我国有绿皇鸠和山皇鸠两种 斑尾林鸠 II 绿鸠(所有种) II 我国8种 鹦形目——鹦鹉科 所有种 II 我国7种 鸮形目 所有种 II 我国两科26种,其中毛腿鱼鸮等可能升为I级 鹃形目——杜鹃科 鸦鹃(所有种) II 我国有褐翅鸦鹃和小鸦鹃两种 雨燕目——雨燕科 灰喉针尾雨燕 II 雨燕目——凤头雨燕科 凤头雨燕 II 咬鹃目——咬鹃科 橙胸咬鹃 II 佛法僧目——翠鸟科 蓝耳翠鸟 II 鹳嘴翠鸟 II 佛法僧目——蜂虎科 黑胸蜂虎 II 绿喉蜂虎 II 佛法僧目——犀鸟科 所有种 II 我国有双角犀鸟,冠斑犀鸟,棕颈犀鸟和白喉犀鸟四种,可能升到I级 鴷形目——啄木鸟科 白腹木鸟 II 雀形目——阔嘴鸟科 所有种 II 我国有长尾阔嘴鸟和银胸丝冠鸟两种 雀形目——八色鸫科 所有种 II 我国8种 脊索动物门 爬行纲 龟鳖目——龟科 地龟 II 三线闭壳龟 II 云南闭壳龟 II 龟鳖目——陆龟科 四爪陆龟 I 凹甲陆龟 II 龟鳖目——海龟科 蠵龟 II 绿海龟 II 玳瑁 II 太平洋丽龟 II 龟鳖目——棱皮龟科 棱皮龟 II 龟鳖目——鳖科 鼋 I 山瑞鳖 II 蜥蜴目——壁虎科 大壁虎(蛤蚧) II 有的分类方法把蜥蜴目和蛇目列为有鳞目的两个亚目 蜥蜴目——鳄蜥科 鳄蜥 I 可能降为II级 蜥蜴目——巨蜥科 泽巨蜥(圆鼻巨蜥) I 蛇目蟒科 黑尾蟒 I 有的分类方法把蜥蜴目和蛇目列为有鳞目的两个亚目 鳄目——鼍科(短吻鳄科) 扬子鳄 I 两栖纲 有尾目——隐鳃鲵科 大鲵 II 可能升为I级 有尾目——蝾螈科 细痣疣螈 II 镇海疣螈 II 贵州疣螈 II 大凉疣螈 II 红瘰疣螈 II 疣螈在我国只有这五种,相当于所有种 无尾目——蛙科 虎纹蛙 II 可能解除保护 鱼纲 鲈形目——石首鱼科 黄唇鱼 II 鲈形目——杜父鱼科 松江鲈鱼 I 海龙鱼目——海龙鱼科 克氏海马 II 鲤形目——胭脂鱼科 胭脂鱼 II 鲤形目——鲤科 唐鱼 II 大头鲤 II 金线鲃 II 新疆大头鱼 I 大理裂腹鱼 II 鳗鲡目——鳗鲡科 花鳗鲡 II 世纪末在成都水族馆冻死的鱼便有这种 鲑形目——鲑科 川陕哲罗鲑 II 秦岭细鳞鲑 II 鲟形目——鲟科 中华鲟 I 达氏鲟 II 鲟形目——匙吻鲟科 白鲟 I 文昌鱼纲 文昌鱼目——文昌鱼科(鳃口科) 白氏11文昌鱼 II 半索动物门 肠鳃纲 ——柱头虫科 多鳃孔舌形虫 I 玉钩虫科 黄岛长吻虫 I 软体动物门 腹足纲 中腹足目——宝贝科 虎斑宝贝 II 中腹足目——冠螺科 冠螺 II 瓣鳃纲 异柱目——珍珠贝科 大珠母贝 II
& 真瓣鳃目——砗磲科 库氏砗磲 I 真瓣鳃目——蚌科 佛耳丽蚌 II 头足纲 四鳃目——鹦鹉螺科 鹦鹉螺 I 节肢动物门 昆虫纲 双尾目——铗[虫八]科 伟铗[虫八] II 蜻蜓目——箭蜓科 尖板曦箭蜓 II 宽纹北箭蜓 II 缺翅目——缺翅虫科 中华缺翅虫 II 墨脱缺翅虫 II 最近在雅鲁藏布江大峡谷的考察中发现的缺翅虫可能也是这种 蛩蠊目——蛩蠊科 中华蛩蠊 I 鞘翅目——步甲科 拉步甲 II 硕步甲 II 鞘翅目——臂金龟科 彩臂金龟(所有种) II 鞘翅目——犀金龟科 叉犀金龟 II 鳞翅目——凤蝶科 金斑喙凤蝶 I 双尾褐凤蝶 II 三尾褐凤蝶 II 中华虎凤蝶 II 鳞翅目——绢蝶科 阿波罗绢蝶 II 腔肠动物门 珊瑚纲 柳珊瑚目红珊瑚科 红珊瑚 I
其他回答 (4)
 蜂猴、熊猴、台湾猴、豚尾猴、叶猴、金丝猴、长臂猿、马来熊、大熊猫、紫貂、貂熊、熊狸、云豹、豹、虎、雪豹、儒艮、白鳍豚、中华白海豚、亚洲象、蒙古野驴、西藏野驴、野马、野骆驼、鼷鹿、黑麂、白唇鹿、坡鹿、梅花鹿、豚鹿、麋鹿、野牛、野牦牛、羚牛、普氏原羚、藏羚羊、高鼻羚羊、扭角羚、台湾鬣羚、赤斑羚、塔尔羊、北山羊、河狸、短尾信天翁、白腹军舰鸟、白鹳、黑鹳、朱鹮、中华秋沙鸭、金雕、白肩雕、玉带海雕、白尾海雕、虎头海雕、拟兀鹫、胡兀鹫、细嘴松鸡、斑尾榛鸡、雉鹑、四川山鹧鸪、海南山鹧鸪、黑头角雉、红胸角雉、灰腹角雉、黄腹角雉、虹雉、褐马鸡、蓝鹇、黑颈长尾雉、白颈长尾雉、黑长尾雉、孔雀雉、绿孔雀、黑颈鹤、白头鹤、丹顶鹤、白鹤、赤颈鹤、鸨、遗鸥、四爪陆龟、鼋、鳄蜥、巨蜥、蟒、扬子鳄、新疆大头鱼、中华鲟、达氏鲟、白鲟、红珊瑚、库氏砗磲、鹦鹉螺、中华蛩蠊、金斑喙凤蝶、多鳃孔舌形虫、黄岛长吻虫。
兽类篇&两栖爬行动物
蜂猴所有种 熊猴 台湾猴 豚尾猴 叶猴所有种 金丝猴所有种 长臂猿所有种 大熊猫 紫貂 貂熊 熊狸 云豹 豹 虎 雪豹 儒艮 白暨豚 中华白海豚 亚洲象 黑麂 蒙古野驴 西藏野驴 野马 野骆驼 鼷鹿 白唇鹿 坡鹿 梅花鹿 豚鹿 麋鹿 野牛 野牦牛 普氏原羚 藏羚 高鼻羚羊 扭角羚 台湾鬣羚 赤斑羚 塔尔羊 北山羊 河狸 马来熊滇金丝猴别名黑金丝猴、黑仰鼻猴、雪猴,属于猴科学名为 Rhinopithecus bieti滇金丝猴头顶有尖形黑色冠毛,雌性个体较雄性小。眼周和吻鼻部青灰色或肉粉色,鼻端深蓝色。毛色比较单调,背、体侧、四肢外侧和尾均为棕灰、灰黑色,毛长达23厘米;喉、颈、上肢内侧、臀部为白色,胸部乳白,腹部橘黄色。栖息于海拔3000米以上的高山暗针叶林带,是猴类中栖息地海拔最高的种类。喜结群生活,有垂直迁移的习性,冬季下到海拔较低处活动。取食云杉、冷杉等针叶树的嫩芽及松萝、竹笋等,在中午气温高时猴群处于休息状态。产于云南西北部、西藏西南部。滇金丝猴是中国的特有种,其分布区狭小,各自然种群成岛状分布,相互隔离。在比较集中的分布区已建立白马雪山、哈巴雪山、盐井等自然保护区。属于国家一级保护动物。 大熊猫 食肉目
大熊猫科 学名:Ailuropoda melanoleuca英文名:Ciant panda
分布于中国的四川、陕西、甘肃。中国特有种,野生数量不足1000 只,人工饲养下约100只。
大熊猫(又名大猫熊)栖居于海泼米的高山竹林中。独 居,昼夜均有活动和休息,无定居。视、听觉较差,嗅觉尚好,体态笨 拙,善攀爬,会游泳。以竹叶、竹笋、竹杆等为食,偶食小动物、鸟卵。繁殖期春季,孕期80-160天,每产1-2仔,5-7岁性成熟,寿命25- 30年。北京动物园1955年开始饲养展出,1963年繁殖成功,1978年人工 授予精繁殖成功,1993年全人工哺育成功,1999年人工辅助母兽哺育双 仔成功。
为中国一级保护动物。
被列入濒危野生动植物种国际贸易公约附录
华南虎华南虎属食肉目,猫科主要生活在森林、丛林和野草丛生的地方,没有固定的巢穴,活动区域特别大,可行走50多公里,属夜行性动物,白天休息,晨昏活动最频繁,善于游泳,不会攀爬,捕食勇猛,喜单独行动, 视觉、听觉极为发达,脊柱关节灵活,行走时爪能收缩,没有响声,十分轻巧迅速,主要捕食大型食草类动物,饱餐后可维持数日,冬季发情交配,孕期100天左右,每胎产2--4仔,平均寿命20余年,性成熟年龄3--6岁 。 华南虎为我国特有种,历史上分布广泛,六十年代之后,其数量急剧下降,野外调查其数量已相当稀少。现存活个体20--30只,而且由于其数量少,繁殖相当困难,所以对华南虎的保护工作,相对来讲难度较大。
白暨豚别名白暨、白鳍豚,属于喙豚科学名为 Lipotes vexillifer
白暨豚是一种类似海豚而生活于江湖中的淡水哺乳动物,身体呈纺锤形,全身皮肤裸露无毛,具长吻,眼小而退化;声纳系统特别灵敏,能在水中探测和识别物体。背鳍呈钝三角形,鳍肢与尾鳍均向水平方向平展。体背部青灰色,腹部白色,新生幼兽的体色比成体深。雌体腹部生殖裂两侧各有一个乳裂,雄体肛门前方有一个盲状小孔。截至目前,已发现的最大雌性个体长253厘米,重237千克;最大雄性个体长216厘米,重125千克。白暨豚生活于长江中下游附近多沙洲、边滩并有大、小支流与干流相连的地段。喜欢群居,尤其在春天交配季节,集群行为就更明显。每群一般2~6头。其活动范围广,但对水文条件要求较高,经常在一个固定区域停留一段时间,待水文条件发生改变后,又迁入另一地域。以鱼类为食。白暨豚两年繁殖一次,每胎1仔,出生时体长80厘米左右。白暨豚种群数量很小,为我国特有的珍稀水生兽类,亟待加强保护。产于长江中下游湖北、安徽、江苏段的干流之中。属于国家一级保护动物。黑麂是麂类中体型较大的种类。体长100~110厘米,肩高60厘米左右,体重21~26千克。雄性具角,角柄较长,头顶部和两角之间有一簇长达5~7厘米的棕色冠毛。冬毛上体暗褐色;夏毛棕色成分增加。尾较长,一般超过20厘米,背面黑色,尾腹及尾侧毛色纯白,白尾十分醒目。栖息在山地丛林中。胆小怯懦,恐惧感强,大多营独居生活。有游走觅食的习性,在一定的范围内来回觅食,直到吃饱为止;以乔、灌木嫩枝叶、花果或草本植物为食。繁殖期不固定。孕期约6个月,每胎1仔。黑鹿是我国特产动物,有较高的研究、经济价值。产于安徽、浙江、江西和福建。属于国家一级保护动物。
蜂猴、熊猴、台湾猴、豚尾猴、叶猴、金丝猴、长臂猿等。
国家特级保护动物很少但我知道的就是“烙铁头蛇”莽山烙铁头蛇,俗称“小青龙”,全长可达2米,是具有管牙的毒蛇,头背黑褐色,有典型的黄绿色斑纹。尾后半为一致的浅黄绿色或几近于白色。头大,三角形,与颈区分明显烙铁头蛇是我国特有的珍稀物种,目前,全球仅在湖南莽山自然保护区东部林区有发现,生存数量只有300条。莽山烙铁头蛇还极具观赏价值,全身色泽鲜艳,被生物界称为“蛇中熊猫”。
相关知识等待您来回答
理工学科领域专家
& &SOGOU - 京ICP证050897号类和对象_百度百科
关闭特色百科用户权威合作手机百科
收藏 查看&类和对象
对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型,其定义为:class 类名{}它们的关系是,对象是类的实例,类是对象的模板。[1]载&&&&体计算机分&&&&类科技
类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。
对象是具有类类型的变量。类和对象是面向对象编程技术中的最基本的概念。[2]类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。class 类名
公用的数据和成员函数
protected:
保护的数据和成员函数
私有的数据和成员函数
};1.先声明类类型,然后再定义对象
举例:Student stud1,stud2; //Student是已经声明的类类型
2.在声明类类型的同时定义对象
classStudent
//声明类类型
//先声明公用部分
voiddisplay()
{cout&&″num:″&&num&&
cout&&″name:″&&name&&
cout&&″sex:″&&sex&&}
//后声明私有部分
charname[20];
}stud1,stud2;//定义了两个Student类的对象
在定义Student类的同时,定义了两个Student类的对象。
3.不出现类名,直接定义对象
class//无类名
{private://声明以下部分为私有的
public://声明以下部分为公用的
}stud1,stud2;//定义了两个无类名的类对象
直接定义对象,在C++中是合法的、允许的,但却很少用,也不提倡用。在实际的程序开发中,一般都采用上面3种方法中的第1种方法。在小型程序中或所声明的类只用于本程序时,也可以用第2种方法。在定义一个对象时,会为这个对象分配存储空间,以存放对象中的成员。C++增加了class类型后,仍保留了(struct ),而且把它的功能也扩展了。C++允许用struct来定义一个类型。如可以将前面用关键字class声明的类类型改为用关键字struct。
为了使结构体类型也具有封装的特征,C++不是简单地继承C的结构体,而是使它也具有类的特点,以便于用于。
用struct声明的结构体类型实际上也就是类。用struct声明的类,如果对其成员不作private或public的声明,系统将其默认为public。
如果想分别指定私有成员和公用成员,则应用private或public作显式声明。
而用class定义的类,如果不作private或public声明,系统将其成员默认为private,在需要时也可以自己用显式声明改变。
如果希望成员是公用的,使用struct比较方便,如果希望部分成员是私有的,宜用class。建议尽量使用class来建立类,写出完全体现C++风格的程序。(简称类函数)是函数的一种,它的用法和作用和第4章介绍过的函数基本上是一样的,它也有返回值和函数类型,
它与的区别只是:
它是属于一个类的成员,出现在类体中。
它可以被指定为private(私有的)、public (公用的)或protected(受保护的)。
在使用类函数时,要注意调用它的权限(它能否被调用)以及它的(函数能使用什么范围中的数据和函数)。
例如私有的成员函数只能被本类中的其它成员函数所调用,而不能被类外调用。
成员函数可以访问本类中任何成员(包括私有的和公用的),可以引用在本作用域中有效的数据。
一般的做法是将需要被外界调用的成员函数指定为public,它们是类的对外接口。
但应注意,并非要求把所有成员函数都指定为public。有的函数并不是准备为外界调用的,而是为本类中的成员函数所调用的,就应该将它们指定为private。
这种函数的作用是支持其它函数的操作,是类中其它成员的工具函数(utility function),类外用户不能调用这些私有的工具函数。
是类体中十分重要的部分。如果一个类中不包含成员函数,就等同于C语言中的了,体现不出类在中的作用。classStudent
voiddisplay();
//公用成员函数原型声明
//以上3行是私有数据成员
voidStudent∷display()
//在类外定义display类函数
{cout&&″num:″&&num&&
cout&&″name:″&&name&&
cout&&″sex:″&&sex&&
Studentstud1,stud2;
//定义两个类对象
注意:在类体中直接定义函数时,不需要在函数名前面加上类名,因为函数属于哪一个类是不言而喻的。
但成员函数在类外定义时,必须在函数名前面加上类名,予以限定(qualifed),“∷”是(field qualifier)或称作用域运算符,用它声明函数是属于哪个类的。
如果在作用域运算符“∷”的前面没有类名,或者函数名前面既无类名又无作用域运算符“∷”,
如 ∷display( ) 或 display( ),则表示display函数不属于任何类,这个函数不是成员函数,而是,即非成员函数的一般普通函数。
类函数必须先在类体中作原型声明,然后在类外定义,也就是说类体的位置应在函数定义之前,否则编译时会出错。
虽然函数在类的外部定义,但在调用成员函数时会根据在类中声明的函数原型找到函数的定义(函数代码),从而执行该函数。
在类的内部对成员函数作声明,而在类体外定义成员函数,这是程序设计的一种良好习惯。
如果一个函数,其只有2-3行,一般可在声明类时在类体中定义。多于3行的函数,一般在类体内声明,在类外定义。在类体中定义的成员函数的规模一般都很小,而系统调用函数的过程所花费的时间开销相对是比较大的。调用一个函数的时间开销远远大于小规模中全部语句的执行时间。
为了减少时间开销,如果在类体中定义的成员函数中不包括循环等控制结构,C++系统会自动将它们作为内置(inline )函数来处理。
也就是说,在程序调用这些成员函数时,并不是真正地执行函数的调用过程(如保留返回地址等处理),而是把函数代码嵌入程序的调用点。
这样可以大大减少调用成员函数的时间开销。C++要求对一般的要用关键字inline声明,但对类内定义的成员函数,可以省略inline,因为这些成员函数已被隐含地指定为内置函数。如
classStudent
voiddisplay()
{cout&&″num:″&&num&&cout&&″name:″
&&name&&cout&&″sex:″&&sex&&}
void display( ) 也可以写成
inline void display( )
将display函数显式地声明为。
以上两种写法是等效的。对在类体内定义的函数,一般都省写inline。
应该注意的是: 如果成员函数不在类体内定义,而在类体外定义,系统并不把它默认为内置(inline )函数,调用这些成员函数的过程和调用的过程是相同的。如果想将这些成员函数指定为内置函数,应当用inline作显式声明。如
classStudent
public:inlinevoiddisplay();//声明此成员函数为内置函数
inlinevoidStudent∷display()//在类外定义display函数为内置函数
{cout&&″num:″&&num&&cout&&″name:″&&name&&cout&&″sex:″&&sex&&}
在函数的声明或函数的定义两者之一作inline声明即可。
值得注意的是: 如果在类体外定义inline函数,则必须将类定义和成员函数的定义都放在同一个头文件中(或者写在同一个中),否则编译时无法进行置换(将函数代码的拷贝嵌入到点)。
但是这样做,不利于类的接口与类的实现分离,不利于。虽然程序的执行效率提高了,但从质量的角度来看,这样做并不是好的办法。
只有在类外定义的成员函数规模很小而调用频率较高时,才将此成员函数指定为。用类去定义对象时,系统会为每一个对象分配存储空间。
如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间。
按理说,如果用同一个类定义了10个对象,那么就需要分别为10个对象的数据和函数代码分配。
能否只用一段空间来存放这个共同的函数,在调用各对象的函数时,都去调用这个公用的函数代码。
显然,这样做会大大节约存储空间。C++正是这样做的,因此每个对象所占用的存储空间只是该对象的数据部分所占用的存储空间,而不包括函数代码所占用的存储空间。如果声明了一个类:
{cin&&a&&b&&c;}
可以用下面的语句来输出该类对象所占用的字节数:
cout&&sizeof(Time)&&
输出的值是12。
这就证明了一个对象所占的空间大小只取决于该对象中数据成员所占的空间,而与成员函数无关。
函数代码是存储在对象空间之外的。如果对同一个类定义了10个对象,这些对象的成员函数对应的是同一个函数,而不是10个不同的函数代码段。
需要注意的是: 虽然调用不同对象的成员函数时都是执行同一段函数代码,但是执行结果一般是不相同的。
不同的对象使用的是同一个函数代码段,它怎么能够分别对不同对象中的数据进行操作呢?
原来C++为此专门设立了一个名为this的,用来指向不同的对象。需要说明:
(1) 不论成员函数在类内定义还是在类外定义,成员函数的代码段都用同一种方式存储。
(2) 不要将成员函数的这种存储方式和inline(内置)函数的概念混淆。
(3) 应当说明: 常说的“某某对象的成员函数”,是从逻辑的角度而言的,而成员函数的存储方式,是从物理的角度而言的,二者是不矛盾的。例如在程序中可以写出以下语句:
stud1.num=1001;//假设num已定义为公用的整型数据成员
表示将整数1001赋给对象stud1中的num。
其中“.”是成员运算符,用来对成员进行限定,指明所访问的是哪一个对象中的成员。
注意不能只写成员名而忽略对象名。
访问对象中成员的一般形式为
对象名.成员名
不仅可以在类外引用对象的公用数据成员,而且还可以调用对象的公用成员函数,但同样必须指出对象名,如
stud1.display( );//正确,调用对象stud1的公用成员函数
display( );//错误,没有指明是哪一个对象的display函数
由于没有指明对象名,编译时把display作为普通函数处理。
应该注意所访问的成员是公用的(public )还是私有的(private )。只能访问public成员,而不能访问private成员,如果已定义num为私有,下面的语句是错误的:
stud1.num=10101;//num是私有数据成员,不能被外界引用
在类外只能调用公用的成员函数。在一个类中应当至少有一个公用的成员函数,作为对外的接口,否则就无法对对象进行任何操作。class Time
public : //是公用的
};Time t,*p;//定义对象t和p
p=&t;//使p指向对象t
cout&&p-&//输出p指向的对象中的成员hour
在p指向t的前提下,p-&hour,(*p).hour和t.hour三者等价。如果为一个对象定义了一个,它们是共占同一段的,实际上它们是同一个对象,只是用不同的名字表示而已。
因此完全可以通过引用变量来访问对象中的成员。
如果已声明了Time类,并有以下定义语句:
Time t1; //定义对象t1
Time &t2=t1;//定义Time类引用变量t2,并使之初始化为t1
cout&&t2.//输出对象t1中的成员hour
由于t2与t1共占同一段存储单元(即t2是t1的别名),因此t2.hour就是t1.hour。最简单的例子。
#include&iostream&
classTime//定义Time类
{public://数据成员为公用的
Timet1;//定义t1为Time类对象
cin&&t1.//输入设定的时间
//输出时间:
cout&&t1.hour&&″:″&&t1.minute&&″:″&&t1.sec&&
运行情况如下: 1232 43↙
(1) 在引用hour,minute,sec时不要忘记在前面指定对象名。
(2) 不要错写为类名,
Time.hour,Time.minute,Time.sec是不对的。因为类是一种抽象的数据类型,并不是一个实体,也不占存储空间,而对象是实际存在的实体,是占存储空间的,其数据成员是有值的,可以被引用的。
(3) 如果删去的3个输入语句,即不向这些数据成员赋值,则它们的值是不可预知的。引用多个对象的成员。
(1)程序(a)
#include&iostream&
{Timet1;//定义对象t1
cin&&t1.//向t1的数据成员输入数据
cout&&t1.hour&&″:″&&t1.minute&&″:″&&t1.sec&&//输出t1中数据成员的值
Timet2;//定义对象t2
cin&&t2.//向t2的数据成员输入数据
cout&&t2.hour&&″:″&&t2.minute&&″:″&&t2.sec&&//输出t2中数据成员的值
运行情况如下:
程序是清晰易懂的,但是在主函数中对不同的对象一一写出有关操作,会使程序冗长。为了
解决这个问题,可以使用函数来进行输入和输出。见程序(b)。
(2)程序(b)
#include&iostream&
voidset_time(Time&);//函数声明
voidshow_time(Time&);//函数声明
Timet1;//定义t1为Time类对象
set_time(t1);//调用set_time函数,向t1对象中的数据成员输入数据
show_time(t1);//调用show_time函数,输出t1对象中的数据
Timet2;//定义t2为Time类对象
set_time(t2);//调用set_time函数,向t2对象中的数据成员输入数据
show_time(t2);//调用show_time函数,输出t2对象中的数据
voidset_time(Time&t)//定义函数set_time,形参t是引用变量
cin&&t.//输入设定的时间
voidshow_time(Time&t)//定义函数show_time,形参t是引用变量
cout&&t.hour&&″:″&&t.minute&&″:″&&t.sec&&//输出对象中的数据
运行情况与程序(a)相同。
(3) 程序(c)
可以对上面的程序作一些修改,的值不再由键盘输入,而在调用函数时由给出,并在函数中使用。将程序(b)第8行以下部分改为
voidset_time(Time&,inthour=0,int
minute=0,intsec=0);//函数声明
voidshow_time(Time&);//函数声明
set_time(t1,12,23,34);//通过实参传递时、分、秒的值
show_time(t1);
set_time(t2);//使用默认的时、分、秒的值
show_time(t2);
voidset_time(Time&t,inthour,intminute,intsec)
voidshow_time(Time&t)
cout&&t.hour&&″:″&&t.minute&&″:″&&t.sec&&
程序运行时的输出为
12:23:34 (t1中的时、分、秒)
0:0:0 (t2中的时、分、秒)
以上两个程序中定义的类都只有,没有成员函数,这显然没有体现出使用类的优越性。在下面的例子中,类体中就包含了成员函数。将例2的程序改用含成员函数的类来处理。
#include&iostream&
voidset_time();//公用成员函数
voidshow_time();//公用成员函数
private://数据成员为私有
Timet1;//定义对象t1
t1.set_time();//调用对象t1的成员函数set_time,向t1的数据成员输入数据
t1.show_time();//调用对象t1的成员函数show_time,输出t1的数据成员的值
Timet2;//定义对象t2
t2.set_time();//调用对象t2的成员函数set_time,向t2的数据成员输入数据
t2.show_time();//调用对象t2的成员函数show_time,输出t2的数据成员的值
voidTime∷set_time()//在类外定义set_time函数
voidTime∷show_time()//在类外定义show_time函数
cout&&hour&&″:″&&minute&&″:″&&sec&&
运行情况与例2中的程序(a)相同。
(1) 在中调用两个成员函数时,应指明对象名(t1,t2)。表示调用的是哪一个对象的成员函数。
(2) 在类外定义函数时,应指明函数的(如void Time∷set_time( ))。在成员函数引用本对象的时,只需直接写数据成员名,这时C++系统会把它默认为本对象的数据成员。也可以显式地写出类名并使用域。
(3) 应注意区分什么场合用域运算符“∷”,什么场合用成员运算符“.”,不要搞混。找出一个中的元素的最大值。这个问题可以不用类的方法来解决,用类来处理,读者可以比较不同方法的特点。
#include&iostream&
classArray_max//声明类
{public://以下3行为成员函数原型声明
voidset_value();//对数组元素设置值
voidmax_value();//找出数组中的最大元素
voidshow_value();//输出最大值
intarray[10];//整型数组
//max用来存放最大值
voidArray_max∷set_value()//成员函数定义,向数组元素输入数值
for(i=0;i&10;i++)
cin&&array[i];
voidArray_max∷max_value()//成员函数定义,找数组元素中的最大值
max=array[0];
for(i=1;i&10;i++)
if(array[i]&max)max=array[i];
voidArray_max∷show_value()//成员函数定义,输出最大值
{cout&&″max=″&&}
{Array_//定义对象arrmax
arrmax.set_value();//调用arrmax的set_value函数,向数组元素输入数值
arrmax.max_value();//调用arrmax的max_value函数,找出数组元素中的最大值
arrmax.show_value();//调用arrmax的show_value函数,输出数组元素中的最大值
运行结果如下:
12 12 39 -34 17 134 045 -91 76↙ (输入10个元素的值)
max=134 (输入10个元素中的最大值)
请注意成员函数定义与调用成员函数的关系,定义成员函数只是设计了一组操作代码,并未实际执行,只有在被调用时才真正地执行这一组操作。
可以看出: 很简单,语句很少,只是调用有关对象的成员函数,去完成相应的操作。
在大多数情况下,主函数中甚至不出现控制结构(判断结构和),而在成员函数中使用控制结构。
在中,最关键的工作是类的设计。所有的数据和对数据的操作都体现在类中。
只要把类定义好,编写程序的工作就显得很简单了。
新手上路我有疑问投诉建议参考资料 查看

我要回帖

更多关于 2018年是什么生肖年 的文章

 

随机推荐