首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++基础有关问题(私有成员变量)

2013-11-11 
C++基础问题(私有成员变量)#includeiostream.hclass Student{private: int x0,y0//为什么这样错误 in

C++基础问题(私有成员变量)
#include<iostream.h>
class Student{
private: 
int x=0,y=0;  //为什么这样错误 int x,y; 这样就可以 如果想表达这样意思该怎么弄
public:
Student(){
x=1;
y=1;
}
Student(int a,int b){
x=a;
y=b;
}
void get(){
cout<<x<<" "<<y<<endl;
}
};

int main(){
Student student(5,6);
student.get();
return 0;
}
[解决办法]
static int x,y;
再在某一个包括了这个类所在的头文件的cpp文件中进行实现:
int Student::x=0;
int Student::y=0;
[解决办法]
使用最新版的编译器,c11 支持了。
struct S
{
int x = 0;
int y{ 1 };
};
[解决办法]
类声明中一般不能有定义(分配内存),对类对象的定义由类的构造函数来完成!
[解决办法]
跟你说下吧,当你创建对象时,会调用指定的构造函数,如果没有指定参数就会调用无参数的那个。

这样的话,你之前设定的0,0肯定是无效的,因为一旦创建对象了,就会变转为你指定的数值。即便是静态的数据,你如果创建了一个对象之后,再用Student::x访问,那么它的值也已经改变了,也不会是0。因为类中对静态成员是共享的,除非你只有在构造前才访问Student::x。

我不知道你需要这个0做什么,如果是可以直接给外部调用,而且无所谓被修改的话,static是可以的。如果你只需要普通的成员,那么就不要指定具体值了,因为构造函数就是为了初始化成员用的。正确的作法就是在构造函数里指定,你既然设置了x=1,y=1和x=a,y=b;这两组构造函数,为什么还需要0?我表示不理解。
[解决办法]
C++11好像的确可以,对新标准还不太熟,你指定下编译器的版本就可以了,新编译器都有指定C++11的选项的,你可以试试。
[解决办法]
如果是成员变量在声明的时候是不能初始化的,因为那时候其实还没有内存容间
要在实例化的时候初始化与付值
你要想在进入之前初始化 比如 你使用的是一个引用类型 int & i;
那么 没有初始化的时候是无法使用的,可以如下处理
class aaa
{public:
aaa(int &x):i(x){}
int & i;};

如果你只是要初化i = 0 可以这样
class aaa
{public:
aaa():i(0){}
int  i;};

[解决办法]
标准就是这样的!类的成员都没有如何初始化呢,如果非要这样!
使用静态的成员变量!static
然后拿到类的外面来实现!
[解决办法]

private :
      int   var1;
//    int   var11= 4; 错误的初始化方法
      const int   var2 ;
//    const int   var22 =22222; 错误的初始化方法
      static int   var3;
//    static int   var3333=33333; 错误,只有静态常量成员才能直接赋值来初始化
      static const int   var4=4444; //正确,静态常量成员可以直接初始化
      static const int   var44;
///////***********//////
其实如果假设可以像你说的那样赋值,当出现的继承时
即:class Student{
private: 
int x=0,y=0;  //为什么这样错误 int x,y; 这样就可以 如果想表达这样意思该怎么弄
public:
Student(){
x=1;
y=1;
}

class Child :public student{
在这里,父类x,y继承后是0,0  还是1 ,1呢,答案是构造函数里边的1,1,这样好理解些

}



[解决办法]
使用静态的成员变量才可以,普通成员变量只能用构造函数赋值
[解决办法]
引用:
Quote: 引用:

static int x,y;
再在某一个包括了这个类所在的头文件的cpp文件中进行实现:
int Student::x=0;
int Student::y=0;
这样。。。 意义都变了

你先说清楚为什么要x=0,y=0
你下面的两个构造函数,一个无参数的赋1,另一个有参数的赋指定参数的值,那还有x=0,y=0的必要吗?
[解决办法]
定义成员变量时赋初值和第一个无参构造函数有什么区别?
[解决办法]
引用:
默认啊,如果不给他赋值默认就是0的。。。

你从Java、C#转过来的?C++中不存在空对象,比如A a;他仍然调用了构造函数,就是那个无参数的。
Student(){
    x=1;
    y=1;
}
构造函数是自动触发的,只要建立对象就必定触发,不会像Java那种,你手动调用才会触发。
所以你已经给他初始化1了,没必要给他默认是0.

热点排行