Вы можете изменить член Engine
как const*
, который сделает Engine
объект, на который указывает p
в Car
const
:
class Engine{
public:
void Power(){
}
};
class Car{
public:
Car() : p(new Engine()){}
void Accelerator() const{
p->Power();
}
private:
Engine const* p;
};
Это больше не будет компилировать:
test_const.cpp:12:9: error: member function 'Power' not viable: 'this' argument
has type 'const Engine', but function is not marked const
p->Power();
^
test_const.cpp:3:10: note: 'Power' declared here
void Power(){
^
Но это означает, что ни один член Car
не может изменить *p
, что, вероятно, не то, что вы намереваетесь. См. Комментарий @ NathanOliver для лучшего ответа.
Надеюсь, это поможет.
Потому что ваш 'указатель Engine' является' const' и не то, что он указывает. – AndyG
Есть ли причина, по которой вам нужен «Двигатель» вместо «Двигатель»? – NathanOliver
Настоящий автомобиль будет содержать двигатель и не только укажет на один. –