读书人

常量对象有关问题怎么保证一个常量指

发布时间: 2013-03-25 15:43:04 作者: rapoo

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


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

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

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

class c c++
[解决办法]
//还有这种写法
const OtherClass* obj2;
MyClass myClass1(obj2);
这种写法能通过编译?你试过吗?
const MyClass myClass1(obj2);这样的写法是没办法限制const的,不过可以用函数调用的方法,比如
MyClass getMyClass(OtherClass* obj2);
const MyClass getMyClass(const OtherClass* obj2);
这样的接口来限定是否const
[解决办法]
这种写法本身就是不合法的,不能将const OtherClass* 转化为 OtherClass*

const OtherClass* obj2;
MyClass myClass1(obj2);

[解决办法]
首先,这个本身就不合法,const不能传给非const
引用
const OtherClass* obj2;
MyClass myClass1(obj2);

其次,纯靠c++语法应该做不到你的要求。

一般通过形参加不加const就可以达到保护目的,你连包含他的对象都要控制,这个太霸道了吧。
[解决办法]
会不会你设计的有问题呢?换个思路呢。
[解决办法]
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!

[解决办法]
引用:
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!


你说的是废话,运动是绝对的,静止相对性都是废话。

C++的常量是保证编译正确,不至于写出不好的代码的,但是你企图用“不好的实践”,来证明这些基础设置是不好的,是不完善的,本身就是个错误。

算了,说得太正直,你也不懂。
[解决办法]
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;};

};


[解决办法]
适当使用 但不依赖于 语法糖
[解决办法]
引用:
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!


赵老师说的是,改变内存中的代码段吗?
[解决办法]
AdjustTokenPrivileges
VirtualProtectEx
WriteProcessMemory

读书人网 >C++

热点推荐