C++中,如何访问类的静态成员!
classTest{public:staticvoidfun(){cout<<"CallFun"<<endl;};staticinttCount;};intTest::t...
class Test
{
public:
static void fun(){cout<<"Call Fun"<<endl;};
static int tCount;
};
int Test::tCount = 5;
int main()
{
cout<<Test.tCount<<endl; //这句可编译过去,但有警告!
Test.fun(); //这句语法错误,正确应该用::
}
我不明白为什么同是静态成员,为什么一个可以访问一个不可以访问呢?
再者,为什么用.符号就会有警告呢?是因为向下兼容吗? 展开
{
public:
static void fun(){cout<<"Call Fun"<<endl;};
static int tCount;
};
int Test::tCount = 5;
int main()
{
cout<<Test.tCount<<endl; //这句可编译过去,但有警告!
Test.fun(); //这句语法错误,正确应该用::
}
我不明白为什么同是静态成员,为什么一个可以访问一个不可以访问呢?
再者,为什么用.符号就会有警告呢?是因为向下兼容吗? 展开
展开全部
1.静态成员函数中不能调用非静态成员。
2.非静态成员函数中可以调用静态成员。因为静态成员属于类本身,在类的对象产生之前就已经存在了,所以在非静态成员函数中是可以调用静态成员的。
3.静态成员变量使用前必须先初始化(如int MyClass::m_nNumber = 0;),否则会在linker时出错。
4.在类的非静态成员函数中使用类的静态成员
class Point
{
public:
void init()
{
output();
}
static void output()
{
}
};
void main()
{
Pointpt;
pt.output();
}
5.使用类的静态成员变量
#include <stdio.h>
class Point
{
public:
Point()
{
m_nPointCount++;
}
~Point()
{
m_nPointCount--;
}
static void output()
{
printf("%d\n", m_nPointCount);
}
private:
static int m_nPointCount;
};
int Point::m_nPointCount = 0;
void main()
{
Pointpt;
pt.output();
}
2.非静态成员函数中可以调用静态成员。因为静态成员属于类本身,在类的对象产生之前就已经存在了,所以在非静态成员函数中是可以调用静态成员的。
3.静态成员变量使用前必须先初始化(如int MyClass::m_nNumber = 0;),否则会在linker时出错。
4.在类的非静态成员函数中使用类的静态成员
class Point
{
public:
void init()
{
output();
}
static void output()
{
}
};
void main()
{
Pointpt;
pt.output();
}
5.使用类的静态成员变量
#include <stdio.h>
class Point
{
public:
Point()
{
m_nPointCount++;
}
~Point()
{
m_nPointCount--;
}
static void output()
{
printf("%d\n", m_nPointCount);
}
private:
static int m_nPointCount;
};
int Point::m_nPointCount = 0;
void main()
{
Pointpt;
pt.output();
}
云创
2023-07-25 广告
2023-07-25 广告
要找到一家更省钱的代码静态分析服务,可以考虑以下几个方面:1. 了解自身的需求和预算:首先需要了解自己的项目对代码静态分析服务的需求,以及可承受的预算范围。这将有助于缩小选择范围,找到适合自己的服务。2. 调查市场上的竞争情况:了解市场上提...
点击进入详情页
本回答由云创提供
展开全部
cout<<Test.tCount<<endl; //这句可编译过去,但有警告!
这句不可能编译过去,静态成员和成员函数可以通过类名访问也可以通过类的实例访问,但通过类访问时必须使用域解析符::,所以你这句就是一个语法错误。
Test.fun(); //这句语法错误,正确应该用::
道理同上,要用.来访问静态成员或成员函数就必须先创建一个实例。
下面的两种方法是正确的调用方法:
1.
cout<<Test::tCount<<endl;
Test::fun();
2.
Test t;
cout<<t.tCount<<endl;
t.fun();
不过通过类名来访问静态成员或成员函数更符合静态的定义。
这句不可能编译过去,静态成员和成员函数可以通过类名访问也可以通过类的实例访问,但通过类访问时必须使用域解析符::,所以你这句就是一个语法错误。
Test.fun(); //这句语法错误,正确应该用::
道理同上,要用.来访问静态成员或成员函数就必须先创建一个实例。
下面的两种方法是正确的调用方法:
1.
cout<<Test::tCount<<endl;
Test::fun();
2.
Test t;
cout<<t.tCount<<endl;
t.fun();
不过通过类名来访问静态成员或成员函数更符合静态的定义。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.静态成员函数中不能调用非静态成员。
2.非静态成员函数中可以调用静态成员。因为静态成员属于类本身,在类的对象产生之前就已经存在了,所以在非静态成员函数中是可以调用静态成员的。
3.静态成员变量使用前必须先初始化(如int
MyClass::m_nNumber
=
0;),否则会在linker时出错。
4.在类的非静态成员函数中使用类的静态成员
class
Point
{
public:
void
init()
{
output();
}
static
void
output()
{
}
};
void
main()
{
Pointpt;
pt.output();
}
5.使用类的静态成员变量
#include
class
Point
{
public:
Point()
{
m_nPointCount++;
}
~Point()
{
m_nPointCount--;
}
static
void
output()
{
printf("%d\n",
m_nPointCount);
}
private:
static
int
m_nPointCount;
};
int
Point::m_nPointCount
=
0;
void
main()
{
Pointpt;
pt.output();
}
2.非静态成员函数中可以调用静态成员。因为静态成员属于类本身,在类的对象产生之前就已经存在了,所以在非静态成员函数中是可以调用静态成员的。
3.静态成员变量使用前必须先初始化(如int
MyClass::m_nNumber
=
0;),否则会在linker时出错。
4.在类的非静态成员函数中使用类的静态成员
class
Point
{
public:
void
init()
{
output();
}
static
void
output()
{
}
};
void
main()
{
Pointpt;
pt.output();
}
5.使用类的静态成员变量
#include
class
Point
{
public:
Point()
{
m_nPointCount++;
}
~Point()
{
m_nPointCount--;
}
static
void
output()
{
printf("%d\n",
m_nPointCount);
}
private:
static
int
m_nPointCount;
};
int
Point::m_nPointCount
=
0;
void
main()
{
Pointpt;
pt.output();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对象用 “.” ···
这里你访问的是 静态成员 用的是 类 ,而不是通过对象来访问的,所以用 作用域解析符 “::“ !
这里你访问的是 静态成员 用的是 类 ,而不是通过对象来访问的,所以用 作用域解析符 “::“ !
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你用的是类名,必须用::来限定使用,而.号是对象才用的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询