常量对象问题,如何保证一个常量指针只能赋值给常量对象?

ccnyou 2013-02-26 05:36:30
有类定义

class MyClassA
{
public:
MyClassA(OtherClass* obj);
}

//那么可以酱紫:
OtherClass* obj1;
MyClass myClass1(obj1);
//这是合法的

//还有这种写法
const OtherClass* obj2;
MyClass myClass1(obj2);
//但是怎么让这种写法不合法而必须写成这样子呢?
const MyClass myClass1(obj2);

...全文
245 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-04-28
  • 打赏
  • 举报
回复
1) 常量语法,是为了减少编程错误而引入的。 除了常数,和常量表达式,其他常量都不是真正的常量。 所以,只要你想做,没有办法阻止你,用一些非正常手段,使用代码。 只能尽量做得好一点,健壮一点。
赵4老师 2013-03-21
  • 打赏
  • 举报
回复
AdjustTokenPrivileges VirtualProtectEx WriteProcessMemory
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
赵老师说的是,改变内存中的代码段吗?
ccnyou 2013-03-15
  • 打赏
  • 举报
回复
引用 9 楼 lm_whales 的回复:
class PointerA { A *pa; public: explicit Pointer(A *a):pa(a){}; A& operator*() {return *pa}; A* operator->(){return pa;}; operator A*(){return pa;}; } class Const_Pint……
没别的做法的话,实现两个类也还差强人意
zilaishuichina 2013-03-15
  • 打赏
  • 举报
回复
适当使用 但不依赖于 语法糖
lm_whales 2013-03-15
  • 打赏
  • 举报
回复
class PointerA { A *pa; public: explicit Pointer(A *a):pa(a){}; A& operator*() {return *pa}; A* operator->(){return pa;}; operator A*(){return pa;}; } class Const_PinterA( A *pa; public: explicit Pointer(const A *a):pa(a){}; const A& operator*()const {return *pa;}; const A* operator->()const {return pa;}; operator const A*()const {return pa;}; };
healer_kx 2013-02-27
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
你说的是废话,运动是绝对的,静止相对性都是废话。 C++的常量是保证编译正确,不至于写出不好的代码的,但是你企图用“不好的实践”,来证明这些基础设置是不好的,是不完善的,本身就是个错误。 算了,说得太正直,你也不懂。
赵4老师 2013-02-27
  • 打赏
  • 举报
回复
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
ccnyou 2013-02-26
  • 打赏
  • 举报
回复
其实我的本意是,将MyClassA设计成OtherClass类型的指针的(将 MyClassA obj === OtherClass* obj来使用 ),为了方便基类转子类不需要强制转换。然后思路自然是,普通对象相当于普通指针,常量的对象(const MyClassA obj)相当于常量指针(const OtherClass* obj),当然不能用常量指针(const Other* )初始化一个普通对象(MyClassA obj)。
shn521 2013-02-26
  • 打赏
  • 举报
回复
会不会你设计的有问题呢?换个思路呢。
ccnyou 2013-02-26
  • 打赏
  • 举报
回复
引用 2 楼 starytx 的回复:
这种写法本身就是不合法的,不能将const OtherClass* 转化为 OtherClass* CSS code?12const OtherClass* obj2; MyClass myClass1(obj2);
忘记了,呵呵,不好意思。我是考虑在MyClassA 加个 MyClassA (const OtherClass* obj); 的构造函数
chuachua66 2013-02-26
  • 打赏
  • 举报
回复
首先,这个本身就不合法,const不能传给非const
引用
const OtherClass* obj2; MyClass myClass1(obj2);
其次,纯靠c++语法应该做不到你的要求。 一般通过形参加不加const就可以达到保护目的,你连包含他的对象都要控制,这个太霸道了吧。
starytx 2013-02-26
  • 打赏
  • 举报
回复
这种写法本身就是不合法的,不能将const OtherClass* 转化为 OtherClass*

const OtherClass* obj2; 
MyClass myClass1(obj2); 
rocktyt 2013-02-26
  • 打赏
  • 举报
回复
//还有这种写法
const OtherClass* obj2;
MyClass myClass1(obj2);
这种写法能通过编译?你试过吗? const MyClass myClass1(obj2);这样的写法是没办法限制const的,不过可以用函数调用的方法,比如 MyClass getMyClass(OtherClass* obj2); const MyClass getMyClass(const OtherClass* obj2); 这样的接口来限定是否const

64,649

社区成员

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

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