Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2342113
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:02:23

    在类体中不允许对所定义的数据成员初始化,包括静态数据成员。因为类里的成员变量大多是所有对象公共的,而不是某个对象的成员。有一些带参数的对象可能要公用成员数据,若是在类内初始化,那么对象的参数就不能传给成员变量了,所以,必须在类外初始化。我给你举个例子吧,不是很好,但希望你能看懂。
 #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) |
给主人留下些什么吧!~~