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,这样好理解些
}
默认啊,如果不给他赋值默认就是0的。。。
Student(){构造函数是自动触发的,只要建立对象就必定触发,不会像Java那种,你手动调用才会触发。
x=1;
y=1;
}