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

C++这样用行吗?该怎么处理

2012-03-19 
C++这样用行吗?C/C++ codeclass S {public:int &a //这样?int bint &c b//这样?} //貌似都不行现在

C++这样用行吗?

C/C++ code
class S {public:    int &a; //这样?    int b;    int &c = b;  //这样?}; //貌似都不行

现在我假设有这么个需求, 就是类中需要保留一个变量的引用, 但是类外可以修改这个变量并且同时同步到类中的这个变量. 
例如: 
C/C++ code
class Student {public:    Student();    int &a; //这里有个变量a, 它需要指向某个全局变量ga, 然后修改ga=5就可以得到a=5.     int *pa;  //像这样当然行了. 但是可以用引用来处理吗?             //如果是指针的话, 就可以让pa=另一个地址;             //如果是引用的话, 可以对它重新赋值到另一个变量吗? };

有点乱, 是吧.

[解决办法]
类的成员变量可以是引用,但必须在构造函数中初始化。

C/C++ code
#include<iostream>class C {public:  C(int *n) : m_a(*n) {}  int& m_a;};int main(){  int n = 1;  C o(&n);  n = 99;  std::cout << o.m_a << std::endl;  return 0;}
[解决办法]
上面的代码有点画蛇添足了,无需用指针过渡。

构造函数这样写就行:

C(int& n) : m_a(n) {}

相应的,这样创建对象:

C o(n);

[解决办法]
C/C++ code
class Student {public:    Student();//见三楼 引用成员要用初始化列表初始化 原因可以自己搜索去    int &a; //这里有个变量a, 它需要指向某个全局变量ga, 然后修改ga=5就可以得到a=5. //请注意区分取地址操作int *a = &b 和 引用声明 int &b = a;    int *pa;  //像这样当然行了. 但是可以用引用来处理吗? //可以             //如果是指针的话, 就可以让pa=另一个地址; //不可以 引用只能初始化 比如你在构造函数内部给引用赋值 就会出错            //如果是引用的话, 可以对它重新赋值到另一个变量吗? };
[解决办法]
[Quote=引用:]

类的成员变量可以是引用,但必须在构造函数中初始化。

C/C++ code
#include <iostream>

class C {
public:
C(int *n) : m_a(*n) {}

int&amp; m_a;
};

int main()
{
int n = 1;
C o(&amp;n);
n = 99;
std::cout < < o.m_a < <……
[/Quote]

貌似大家没有关注到楼主的需求,他希望把类的引用成员变量作为外部某变量的别名,修改外部变量时顺带改变该类的引用变量。
下面的程序显示,楼主的意图实现不了,期待牛人分析深层次的原因
#include <iostream>
using namespace std;

class A
{
public:
A(int a): a(a){}
int &a;
};

int main( int argc, char** argv)
{
int a = 10;
A objA(a);
int& b = a;
cout < < "objA.a = " < < objA.a < < "\ta = " < < a < < "\tb = " < < b < < endl;

a = 20;
cout < < "objA.a = " < < objA.a < < "\ta = " < < a < < "\tb = " < < b < < endl;

A objB(a);
cout < < "objB.a = " < < objB.a < < "\ta = " < < a < < endl;
objB.a = 50;
cout < < "objB.a = " < < objB.a < < "\ta = " < < a < < endl;
return 0;
}

output:
objA.a = 10a = 10b = 10
objA.a = 0a = 20b = 20
objB.a = 20a = 20
objB.a = 50a = 20
[解决办法]
可以的:
C/C++ code
#include <iostream>class T{   int &i;public:   T(int &N):i(N){}   int Num(){return i;}};using namespace std;int main(){  int n = 5;  T a(n);  cout << "n=" << n << "   T().i=" << a.Num() << endl;  n = 8;  cout << "n=" << n << "   T().i=" << a.Num() << endl;  return 0;} 

热点排行