在类体中不允许对所定义的数据成员初始化,包括静态数据成员。因为类里的成员变量大多是所有对象公共的,而不是某个对象的成员。有一些带参数的对象可能要公用成员数据,若是在类内初始化,那么对象的参数就不能传给成员变量了,所以,必须在类外初始化。我给你举个例子吧,不是很好,但希望你能看懂。
#include
class Factorial //用类的方法计算阶乘
{
int n; //成员变量的声明,但类内不可赋值
int fact;
public:
void Cfactorial() //成员函数类内实现 ,计算阶乘
{
int j=n;
while(j>1)
fact*=j--;
}
void Display() //成员函数类内实现,显示计算结果
{
cout< getchar();
}
Factorial(int i); //成员函数的声明
};
Factorial:: Factorial(int i) //用构造函数对成员变量初始化
{
n=i;
fact=1;
}
void main() //主函数
{
Factorial A(6); //产生对象,对象带参数
A.Cfactorial(); //对象调用类的成员函数
A.Display();
}
//你如果在类内初始化,若再有个对象B(7)你就没辙了。
--------------------next---------------------
非常感谢你的回复,你的讲解我很理解。类的数据成员一般是由类的构造函数负责初始化,静态的成员是在类的外部初始化。但我在《C++大学教程》第五版(电子工业出版社)看到的一个例题确实在类中声明并处始化了。我把这个例题复制下来你看一下。
// Fig. 7.16: GradeBook.h
// Definition of class GradeBook that uses an array to store test grades.
// Member functions are defined in GradeBook.cpp
#include // program uses C++ Standard Library string class
using std::string;
// GradeBook class definition
class GradeBook
{
public:
// constant -- number of students who took the test
const static int students = 10; // note public data
// constructor initializes course name and array of grades
GradeBook( string, const int [] );
void setCourseName( string ); // function to set the course name
string getCourseName(); // function to retrieve the course name
void displayMessage(); // display a welcome message
void processGrades(); // perform various operations on the grade data
int getMinimum(); // find the minimum grade for the test
int getMaximum(); // find the maximum grade for the test
double getAverage(); // determine the average grade for the test
void outputBarChart(); // output bar chart of grade distribution
void outputGrades(); // output the contents of the grades array
private:
string courseName; // course name for this grade book
int grades[ students ]; // array of student grades
}; // end class GradeBook
在“const static int students = 10"这句中定义了一个静态的常量变量students并初始化为10,整个程序我在编译时出现常量初始化错误提示。是不是我的编译器不兼容?还是语法错误?
--------------------next---------------------
阅读(1107) | 评论(0) | 转发(0) |