数据成员 ■ 数据成员是对类的对象所包含的数据描述,它们可以是常 量和变量。 数据成员的描述格式与非成员数据的声明格式相同,例如: class Date/类定义 private:/访问控制说明 int year,,month,day;/数据成员描述 在C++旧标准中,描述数据成员时不允许进行初始化(某 些静态数据成员除外)。例如: class A int x=0; //Error const double y=0.0; //Error
数据成员 ◼ 数据成员是对类的对象所包含的数据描述,它们可以是常 量和变量。 ◼ 数据成员的描述格式与非成员数据的声明格式相同,例如: class Date //类定义 { ...... private: //访问控制说明 int year,month,day; //数据成员描述 }; ◼ 在C++旧标准中,描述数据成员时不允许进行初始化(某 些静态数据成员除外)。例如: class A { int x=0; //Error const double y=0.0; //Error ...... };
·数据成员的类型可以是任意的C++类型(void除外) 在说明一个数据成员的类型时,如果未见到相应类型 的定义,或相应的类型未定义完,则该数据成员的类 型只能是这些类型的指针或引用类型。例如: class A;/A是在程序其它地方定义的类,这里是声明 class B {Aa;/Error,未见A的定义。 Bb;/Error,B还未定义完。 A *p;//OK B *q;//OK A &aa;//OK B &bb;//OK };
◼ 数据成员的类型可以是任意的C++类型(void除外)。 ◼ 在说明一个数据成员的类型时,如果未见到相应类型 的定义,或相应的类型未定义完,则该数据成员的类 型只能是这些类型的指针或引用类型。例如: class A; //A是在程序其它地方定义的类,这里是声明。 class B { A a; //Error,未见A的定义。 B b; //Error,B还未定义完。 A *p; //OK B *q; //OK A &aa; //OK B &bb; //OK };
成员函数 ■成员函数是对类定义中的数据成员所能实施的操作描述。 成员函数的实现(函数体)可以放在类定义中,例如: class A void f(){..}/建议编译器按内联函数处理。 }; 成员函数的实现也可以放在类定义外,例如: class A void f(O;/声明 }; void A:f(){.}/需要用类名受限,区别于全局函数
成员函数 ◼ 成员函数是对类定义中的数据成员所能实施的操作描述。 ◼ 成员函数的实现(函数体)可以放在类定义中,例如: class A { ... void f() {...} //建议编译器按内联函数处理。 }; ◼ 成员函数的实现也可以放在类定义外,例如: class A { ... void f(); //声明 }; void A::f() { ... } //需要用类名受限,区别于全局函数
■类成员函数名是可以重载的(析构函数除外), 它遵循一般函数名的重载规则。例如: class A public: void f(); int f(int i); double f(double d);
◼ 类成员函数名是可以重载的(析构函数除外), 它遵循一般函数名的重载规则。例如: class A { ...... public: void f(); int f(int i); double f(double d); ...... };
类成员的访问控制 在C++的类定义中,可以用访问控制修饰符public. private.或protected来控制在类的外部对类成员的 访问限制。例如: class A {public:/访问不受限制。 int x; void f(); private:/只能在本类和友元的代码中访问。 int y; void g(); protected:/只能在本类、派生类和友元的代码中访问。 int Z; void h();
类成员的访问控制 ◼ 在C++的类定义中,可以用访问控制修饰符public、 private或protected来控制在类的外部对类成员的 访问限制。例如: class A { public: //访问不受限制。 int x; void f(); private: //只能在本类和友元的代码中访问。 int y; void g(); protected: //只能在本类、派生类和友元的代码中访问。 int z; void h(); };