关于C++中const的使用 谢谢

NCUie 2009-12-10 10:26:15
当我试图把这些const都去掉并且进行合适的修改的时候 我发现同样可以运行出想要的结果

但是好多个const的用途我并不十分清楚, 可以请大大们帮我解释一下下面每个const的用途么 呵呵有点多 相同使用方式的说一次就可以了 谢谢拉

另外加上这些const之后带来的好处都有哪些呢 谢谢




#include <iostream>
#include <string>
using namespace std;

class Pet {
string pname;
public:
Pet(const string& name) : pname(name) {}
virtual string name() const { return pname; }
virtual string description() const {
return "This is " + pname;
}
};

class Dog : public Pet {
string favoriteActivity;
public:
Dog(const string& name, const string& activity)
: Pet(name), favoriteActivity(activity) {}
string description() const {
return Pet::name() + " likes to " +
favoriteActivity;
}
};

void describe(Pet &p) {
cout << p.description() << endl;
}

int main() {
Pet p("Alfred");
Dog d("Fluffy", "sleep");
describe(p);
describe(d);
}


...全文
140 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
NCUie 2009-12-11
  • 打赏
  • 举报
回复
谢谢各位..请教发出的代码怎么能是那种编译过的样式 跟你们差不多的那种
taodm 2009-12-10
  • 打赏
  • 举报
回复
楼主还是找本《effective c++》认真看看吧。
sduxiaoxiang 2009-12-10
  • 打赏
  • 举报
回复
Google const
KingWolfOfSky 2009-12-10
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

class Pet {
string pname;
public:
Pet(const string& name) : pname(name) {}
virtual string name() const { return pname; }
virtual string description() const {
return "This is " + pname;
}
};

class Dog : public Pet {
string favoriteActivity;
public:
Dog(const string& name, const string& activity)
: Pet(name), favoriteActivity(activity) {}
string description() const {
return Pet::name() + " likes to " +
favoriteActivity;
}
};

void describe(Pet &p) {
cout << p.description() << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
Pet p("Alfred");
Dog d("Fluffy", "sleep");
describe(p);
describe(d);
return 0;
}

总的来说就是保护传入的参数不被修改~~
const其实很简单,一般来说它修饰哪个,哪个就不能被修改了(但是也不是绝对的哦)
  • 打赏
  • 举报
回复
kouwenlong 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hai040 的回复:]
const的作用是让一些错误的操作会在编译时报错
[/Quote]
const会方便调试。
比如可以通过参数限制对数据成员的修改,同时也利于程序的可读性。
这只是个技巧,有些时候可以省略的,都是根据自己的意图。
const int *a.
int * const a;
pur_e 2009-12-10
  • 打赏
  • 举报
回复

Pet(const string& name) : pname(name) {} //这个表示变量name不可以修改
virtual string name() const { return pname; } //这个表示这个函数不会修改成员变量

hai040 2009-12-10
  • 打赏
  • 举报
回复
const的作用是让一些错误的操作会在编译时报错
  • 打赏
  • 举报
回复
如果函数前有const,则是指返回值不能有所改变
对于变量,则意思是该变量为只读,不能有任何改变
  • 打赏
  • 举报
回复

#include <iostream>
#include <string>
using namespace std;

class Pet {
string pname;
public:
Pet(const string& name) : pname(name) {} //此const的意思是传入的变量不能有更改
virtual string name() const { return pname; } //此const的意思是,该函数为只读,也就是数据成员不能有所改变
virtual string description() const { //同上
return "This is " + pname;
}
};

class Dog : public Pet {
string favoriteActivity;
public:
Dog(const string& name, const string& activity)
: Pet(name), favoriteActivity(activity) {}
string description() const {
return Pet::name() + " likes to " +
favoriteActivity;
}
};

void describe(Pet &p) {
cout < < p.description() < < endl;
}

int main() {
Pet p("Alfred");
Dog d("Fluffy", "sleep");
describe(p);
describe(d);
}

jed_chan 2009-12-10
  • 打赏
  • 举报
回复
同意一楼。。。。
chary8088 2009-12-10
  • 打赏
  • 举报
回复
这段代码写作风格很好;要多用const;
const其实很简单,一般来说它修饰哪个,哪个就不能被修改了(但是也不是绝对的哦)
函数那个是不允许对返回值修改
macrojj 2009-12-10
  • 打赏
  • 举报
回复
没有const 也可以得到结果,但是加const 可以让编译器帮你强制检查
dreamfgt 2009-12-10
  • 打赏
  • 举报
回复
.C++中const有什么用?
不要一听到const就说是常量,这样给考官一种在和一个外行交谈的感觉。应该说const修饰的内容不可改变就行了, 定义常量只是一种使用方式而已,还有const数据成员,const参数, const返回值, const成员函数等, 被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

3. C与C++各自是如何定义常量的?有什么不同?
C中是使用宏#define定义, C++使用更好的const来定义。
区别:1)const是有数据类型的常量,而宏常量没有, 编译器可以对前者进行静态类型安全检查,对后者仅是字符替换,没有类型安全检查,而且在字符替换时可能会产生意料不到的错误(边际效应)。2)有些编译器可以对const常量进行调试, 不能对宏调试。
4. 既然C++中有更好的const为什么还要使用宏?
const无法代替宏作为卫哨来防止文件的重复包含
lovesi3344 2009-12-10
  • 打赏
  • 举报
回复
呵呵

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧