c++,看到一句话不能理解????

2025-01-05 16:39:04
推荐回答(3个)
回答1:

static成员没有this形参,它可以直接访问所属类的static成员,但不能直接使用非static成员,怎么理解
这句话应该是这样的:
static成员函数没有this指针作形参,它可以直接访问所属类的static数据成员,但不能直接使用非static数据成员,只能通过对象名来访问

至于楼上的例子,如果a是public访问权限,则外部用b.a访问是正确的
如果a是private访问权限,除了本类函数成员和a的初始化以及派生类中外,外部A::a不对

回答2:

每个非static成员函数都有一个秘密的参数 类名 *const this;要调用这种函数这个参数是必须的!
如:
class A {
public:
void go() {
}
};

void go();就有一个参数:A *const this;
当调用这种函数时,对象的地址会秘密的传递过来.
如:
A a;
a.go();
调用时go()时编译器是这样处理的:
go(&a);
现在知道this的来源了吧!this 是一个常量指针,由编译器负责传递对象地址初始化。

static成员是属于类本身,不是属于对象的。static成员函数没有this指针,要调用非static成员函数至少要知道对象的地址吧,现在连this都没有怎么调用!!
static成员可以同过:类名(或对象名)::成员数据名 或 类名(或对象名)::成员函数名方式使用

class B {
public:
void do() {}
static void go() {}
static void move() {
go();
do();//这个语句就不行
}
static void come(B b) {
b.do();//可以
}
};

回答3:

就是
class A
{
A(){}
static int a;
}
A b;
b.a //实例化对象访问a是错误的
A::a 只能类访问