c++ 在类A 外部声明成员变量 int A::add=0;和在类A中声明成员变量声明 int add=0;是不是一样的 有区别么

谢谢

在类A中只能做变量声明,无法定义。
int add=0;
是错误的,只能写成
int add;

而在类外部只能对static静态变量进行定义,比如在类A中声明了
static int add;
则可以在类外部定义
int A::add=0;
此时会对变量add进行分配内存、初始化等操作。

对于A的普通成员变量,只能在A的函数内进行操作。

一个综合的例子如下:
class A
{
int add;
static int add2;

void fun();
};

int A::add2 =0;

void A::fun()
{
add = 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-23
1.一般数据成员(变量)在类内定义,在构造函数中初始化,对是否使用初始化列表无要求;
class A
{
public:
A(int a, int b):x(a), y(b){};//初始化列表初始化普通数据成员
private:
int x;
int y;
};
或者
class A
{
public:
A(int a, int b);
private:
int x;
int y;
};
A::A(int a, int b)
{
x = a;
y = b;
}
2.const数据成员在类内定义,在构造函数中初始化,且只能在构造函数的初始化列表中初始化,如下所示:
class A
{
public:
A(int a, int b):num(a), x(b){};//初始化列表初始化const数据成员
private:
const int num;
int x;
};
3.static数据成员在类内声明,类外定义和初始化,类外定义时省略关键字static,如下所示:
class A
{
private:
static int num;//类内声明
};

int A::num = 5;//类外定义、初始化,且省略关键字static
第2个回答  2011-09-08
不可以的,只能是单个的整形变量。而且,老的编译器不允许任何在类声明中的初始化。新的标准也建议放到类的外面初始化。

给个简单的例子:

[18:43:46@~/c-cpp]$ cat a.cpp
#include<iostream>
class A ;
int A::i = 3;
int main()
[18:44:28@~/c-cpp]$ g++ -Wall a.cpp
[18:44:33@~/c-cpp]$
第3个回答  2011-09-08
可访问性不同。追问

能具体点么?? 谢谢

追答

就是由于你在类A中声明的属性是有可访问性设置的,private,protect,public这三种区别,所以会有差别啊……

追问

哦 那如果我在类A 外部定义 int A;;add=0; A a; a.add 是可以的把??

追答

这样是可以的……

第4个回答  2011-09-08
没有

C++中类成员变量能否在“声明”时给初值?
不可以的,只能是单个的整形变量。而且,老的编译器不允许任何在类声明中的初始化。新的标准也建议放到类的外面初始化。给个简单的例子:[18:43:46@~\/c-cpp]$ cat a.cpp include<iostream> class A { public: static int i;};int A::i = 3;int main(){ std::cout << A::i <<...

C++ 语法:C++变量声明和定义的区别
int A; \/\/是定义,定义了A为整型的外部变量 外部变量的“定义”与外部变量的“声明”是不相同的,外部变量的定义只能有一次,它的位置是在所有函数之外,而同一个文件中的外部变量声明可以是多次的,它可以在函数之内(哪个函数要用就在那个函数中声明)也可以在函数之外(在外部变量的定义点之前)。系统...

C++问题求解,在类中为什么不能给数据成员初始化值:
因为类只是定义的类型, 还没有实例化,也就是没有定义类的对象(变量), 没法存储 你可以在初始化列表里进行初始化 , 而构造函数的函数体之内赋值的话, 是在初始化后,--- 至于定义成static的, 这是静态的, 所有对象共享一个副本, 程序开始执行就初始化了, 就算没有定义对象, 也有它的实例, ...

C++中结构体和类的内存分配以及成员的调用?
在 C++ 中,可以使用 :: 操作符来访问类的 static 变量或 static 方法。例如:class MyClass { public:static int s_value;static void setValue(int value) { s_value = value; } static int getValue() { return s_value; } };int MyClass::s_value = 0;int main() { MyClass::s...

C++中如果要用的类定义在使用之后,该怎样声明?
<conio.h> class A;class B { private:int i;A &a;public:B(int t, A &b):a(b){ i = t;} };class A { private:int i;int j;public:int geti() { return i;} A(int a, int b ){ i = a;j = b;} };int main() { A a(2,3);B(1,a);return 0;} ...

在c++的类中void A(int b)和void A (int)两个为什么是一样的?_百度知...
这是函数的声明,C++在编译过程中,会忽略参数列表中的变量名称,直接解析为void_A_int。但在函数定义时,需要给出参数列表中的变量名;所以,为了统一,一般在函数声明时也会给出变量的名称。

c++中 int a=0;与int a(0);都可以对a进行初始化,这两种方式有没有什么...
没有区别,只是风格不同,前者传统风格,后者面向对象风格。

谁能告诉下C++中成员变量的可见性,最好能举例说明下
public:\/\/定义公有成员,类外可以通过对象访问 Base(int a=0,int b=0,int c=0){i=a;x=b;y=c;} void add(){i++;} int x;protected:\/\/定义保护成员,在类外与私有成员类似,但在派生时能被派生类继承 void addTwo(){i+=2;} int y;private:\/\/定义私有成员,类外不能访问,不被...

C++ 类中的类成员变量怎么调用带参数的构造函数来初始化?
B(int b) : bx(b) \/\/这样调用 { } B() : bx(0) \/\/这样也行 { } \/***\/ void print(){ printf("%d", bx.ax);} \/***\/ A bx; \/\/这样声明 \/***\/ };int main(int argc, char* argv[]){ \/***\/ B b; \/\/使用B的默认构造函数 B bb(10); \/\/使用B的...

C\/C++中的“定义”“声明”如何区别???
1.变量的声明,基本与定义是一样的,即声明变量处即是定义了改变量,如int a; 在处定义了变量。从概念上讲,声明即是让编译器知道要声明的对象是个函数,类,变量等,不为它分配实际的内存空间。所以有函数声明,变量声明,类声明。主要区别是表现在一个类中 class student { int a; \/\/此处就...

相似回答