。* b运算符在c ++中做什么?我找到了这个参考: “对象a的成员b指向的对象”,但它在以下示例中不起作用:
class Color {
public:
int red,green,blue;
Color():red(255), green(255), blue(255){}
Color(int red, int green, int blue) :red(red), green(green), blue(blue){}
void printColor(){
cout << "Red:" << red << " Green:" << green << " Blue:" << blue << endl;
}
};
class Chair{
public:
Color* color;
private:
int legs;
float height;
public:
Chair(int legs, float height):legs(legs), height(height){
color = new Color(255, 0 , 0);
}
void printChair(){
cout << "Legs: " << getLegs() << " , height: " << getHeight() << endl;
}
int getLegs() { return legs; }
float getHeight(){ return height; }
Chair& operator+(Chair& close_chair){
this->legs += close_chair.getLegs();
this->height += close_chair.getHeight();
return *this;
}
};
int main(){
Chair my_chair(4, 1.32f);
my_chair.*color.printColor();
return 0;
}
当我使用my_chair。* color.printColor();在主要,我得到'颜色':未声明的标识符。我在Visual Studio中运行此示例。
谢谢。
答案 0 :(得分:3)
.*
是取消引用指向成员的指针,但您只是想取消引用成员指针。为此,请使用->
:
my_chair.color->printColor();
(*(my_chair.color)).printColor(); //same thing
在您的示例中使用.*
看起来像:
auto colorP = &Chair::color;
(my_chair.*colorP)->printColor();
答案 1 :(得分:3)
如果您要取消引用color
成员,请执行以下操作:
my_chair.color->printColor();
或
(*my_chair.color).printColor();
运算符.*
取消引用指向成员的指针。
指向成员的指针 - “成员指针” - 与作为指针的成员不同 它没有指向“进入”类的特定实例,因此您需要一个与“指针”相关的实例。
示例:
struct A
{
int x;
int y;
};
int main()
{
A a{1, 78};
// Get a pointer to the x member of an A
int A::* int_member = &A::x;
// Prints a.x
std::cout << a.*int_member << std::endl;
// Point to the y member instead
int_member = &A::y;
// Prints a.y
std::cout << a.*int_member << std::endl;
}