PDA

View Full Version : سوال: مقدار دهی در کلاس



sezar_2oo4
چهارشنبه 23 اسفند 1391, 08:46 صبح
سلام.
من وقتی میخوام در قسمت public یه متغییر مثلا int a=0 تعریف میکنم ارور error C2252: 'a' : pure specifier can only be specified for functions میده.

developing
چهارشنبه 23 اسفند 1391, 10:34 صبح
با سلام

شما باید تمام کد رو یا قسمتی که مشکل داره رو بذارید تا بشه راهنمایی کرد ولی من طبق یک سری پیش بینی ها به شما می گم.

هیچ متغیری در کلاس (چه بخش public چه private و چه protected) نمی تواند به صورت مستقیم مقدار دهی شود.

توضیح: فکر می کنید سازنده ها کارشون چیه؟ خب مقداردهی اولیه دیگه.

شما یا باید مقداردهی رو به سازنده محول کنید و یا اینکه از مقداردهی منصرف شوید.

پس با تغییر int a = 0 به int a مشکلتون حل خواهد شد البته اگه این مشکل باشه و چیز دیگه ای نباشه.

sezar_2oo4
چهارشنبه 23 اسفند 1391, 11:02 صبح
من در واقع میخوام که یه متغییر به شکل const int درست کنم که در ارایه ای که تو توابع عضو هست به عنوان اندازه ارایه ازش استفاده کنم ، اما اصلا نمیشه از const استفاده کرد. استفاده هم نکنم به خط اخر گیر میده

این مثال کتاب دیتل هست

// 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 <string> // 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

developing
پنج شنبه 24 اسفند 1391, 09:24 صبح
با سلام

نخست اینکه برنامه ها رو توی تگ کد یا تگ ++C بذار تا خوانا باشن
دوم اگه دقت کنی اون مقداردهی قبلش کلمه ی static هست یعنی ایستا هست.

نکته: در کلاسهای ++C هیچ متغیری مقداردهی نمی شود. مگر اینکه اون متغیر ایستا باشد.

به عبارت دیگه فقط متغیر های ایستا می تونن توی کلاس به صورت مستقیم مقدار دهی اولیه بشن. همین و بس.

sezar_2oo4
پنج شنبه 24 اسفند 1391, 10:41 صبح
ممنون از جوابتون.یعنی من اگه بخوام ارایه تو کلاس تعریف کنم، اندازه ارایه رو نمیتونم متغیر ثابت تعریف کنم و باید عدد بدم؟! اخه به تعریف بالا هم گیر میده.

smemamian
جمعه 25 اسفند 1391, 11:15 صبح
با توجه به نیازتون از static یا enum استفاده کنید.

developing
شنبه 26 اسفند 1391, 09:25 صبح
با سلام

متغیرهای ثابت یا در تابع تعریف می شوند و یا به صورت سراسری. چه اصراری دارید که حتما باید متغیر ثابت شما در کلاس تعریف شوند.

از روش دوستمون smemamian استفاده کنید و یا

اگر حتما نیاز دارید که در کلاس مقدار ثابتی داشته باشید می توانید از روش های زیر استفاده کنید.

class C {
const int w;
const int x;

static const int y = 5;

public:
C(int s) : w(s) {
}

C() : y(3) {
};

static const int z;
};

static const int C::z = 20;

در متغیر w شما می تونید یک مقدار توسط سازنده به اون پاس بدید
در متغیر x شما مقدار ثابتی رو در سازنده به اون انتساب کردید
در y شما یک متغیر ایستای با مقدار ثابت تعریف کردید که در قسمت private اومده
و در z شما به روش متغیرهای ایستا (که باید در قسمت عمومی نوشته شوند) مقدار دهی رو بعد از کلاس آوردید

sezar_2oo4
شنبه 26 اسفند 1391, 10:42 صبح
ممنون از جوابتون