/************************************************************
声明为static的类成员或者成员函数便能在类的范围内共同享,
我们把这样的成员称做静态成员和静态成员函数。
下面实例来说明这个问题,每建立一个对象设置类静态成员变量自动加一
*************************************************************/
#include<iostream>
#include<cstring>
using namespace std;
class Internet
{
public:
Internet(char *name,char *address)
{
strcpy((*this).name,name);
strcpy(Internet::address,address);
count++;
}
static void print_count()//静态成员函数
{
cout<<"count is: "<<count<<endl;
}
void print_Internet()
{
cout<<"name is :"<<name<<" | "<<"address is : "<<address<<endl;
}
Internet &Return_this();
public:
char name[20];
char address[20];
static int count;//这里如果写成static int count=0;就是错误的
};
Internet& Internet::Return_this()//返回引用的成员函数
{
return *this;
}
int Internet::count = 0;//静态成员的初始化
void fn(Internet &s)
{
cout<<"Return_this().count:"<<s.Return_this().count;
}
int main()
{
cout<<"Internet::count: "<<Internet::count<<endl;//静态成员值的输出
Internet a1("清水河畔外网地址","bbs.qshpan.com");
a1.print_Internet();
Internet a2("王世晖的个人专栏","blog.csdn.net/shihui512");
a2.print_Internet();
Internet::print_count();//静态成员函数的调用
Internet b("王世晖CSDN博客","blog.csdn.net/shihui512");
b.print_Internet();
Internet::print_count();
fn(b);
}
/**********************
运行结果:
Internet::count: 0
name is :清水河畔外网地址 | address is : bbs.qshpan.com
name is :王世晖的个人专栏 | address is : blog.csdn.net/shihui512
count is: 2
name is :王世晖CSDN博客 | address is : blog.csdn.net/shihui512
count is: 3
Return_this().count:3
Process returned 0 (0x0) execution time : 0.172 s
Press any key to continue.
************************/
/******************************************************************
静态成员的初始化应该在主函数调用之前,
并且不能在类的声明中出现,静态成员count的状态并不会随着一个
新的对象的新建而重新定义,
尽而了解到类的静态成员是属于类的而不是属于对象的,
所以静态成员的使用应该是类名称加域区分符加成员名称的,
在上面的代码中就是Internet::count,
虽然仍然可以使用对象名加点操作符号加成员名称的方式使用,
但是是不推荐的,静态态类成员的特性就是属于类而不专属于某一个对象。
静态成员函数的特性类似于静态成员的使用,同样与对象无关,
调用方法为类名称加域区分符加成员函数名称,在上面的代码中就是Internet::Sc();
,静态成员函数由于与对象无关系,所以在其中是不能对类的普通成员进行直接操作的。
如果上面的 static void Internet::Sc()修改成为
static void Internet::Sc()//静态成员函数
{
cout<<name<<endl;//错误
cout<<count<<endl;
}
静态成员函数与普通成员函数的差别就在于缺少this指针,
没有这个this指针自然也就无从知道name是哪一个对象的成员了。
***********************************************************************/
声明为static的类成员或者成员函数便能在类的范围内共同享,
我们把这样的成员称做静态成员和静态成员函数。
下面实例来说明这个问题,每建立一个对象设置类静态成员变量自动加一
*************************************************************/
#include<iostream>
#include<cstring>
using namespace std;
class Internet
{
public:
Internet(char *name,char *address)
{
strcpy((*this).name,name);
strcpy(Internet::address,address);
count++;
}
static void print_count()//静态成员函数
{
cout<<"count is: "<<count<<endl;
}
void print_Internet()
{
cout<<"name is :"<<name<<" | "<<"address is : "<<address<<endl;
}
Internet &Return_this();
public:
char name[20];
char address[20];
static int count;//这里如果写成static int count=0;就是错误的
};
Internet& Internet::Return_this()//返回引用的成员函数
{
return *this;
}
int Internet::count = 0;//静态成员的初始化
void fn(Internet &s)
{
cout<<"Return_this().count:"<<s.Return_this().count;
}
int main()
{
cout<<"Internet::count: "<<Internet::count<<endl;//静态成员值的输出
Internet a1("清水河畔外网地址","bbs.qshpan.com");
a1.print_Internet();
Internet a2("王世晖的个人专栏","blog.csdn.net/shihui512");
a2.print_Internet();
Internet::print_count();//静态成员函数的调用
Internet b("王世晖CSDN博客","blog.csdn.net/shihui512");
b.print_Internet();
Internet::print_count();
fn(b);
}
/**********************
运行结果:
Internet::count: 0
name is :清水河畔外网地址 | address is : bbs.qshpan.com
name is :王世晖的个人专栏 | address is : blog.csdn.net/shihui512
count is: 2
name is :王世晖CSDN博客 | address is : blog.csdn.net/shihui512
count is: 3
Return_this().count:3
Process returned 0 (0x0) execution time : 0.172 s
Press any key to continue.
************************/
/******************************************************************
静态成员的初始化应该在主函数调用之前,
并且不能在类的声明中出现,静态成员count的状态并不会随着一个
新的对象的新建而重新定义,
尽而了解到类的静态成员是属于类的而不是属于对象的,
所以静态成员的使用应该是类名称加域区分符加成员名称的,
在上面的代码中就是Internet::count,
虽然仍然可以使用对象名加点操作符号加成员名称的方式使用,
但是是不推荐的,静态态类成员的特性就是属于类而不专属于某一个对象。
静态成员函数的特性类似于静态成员的使用,同样与对象无关,
调用方法为类名称加域区分符加成员函数名称,在上面的代码中就是Internet::Sc();
,静态成员函数由于与对象无关系,所以在其中是不能对类的普通成员进行直接操作的。
如果上面的 static void Internet::Sc()修改成为
static void Internet::Sc()//静态成员函数
{
cout<<name<<endl;//错误
cout<<count<<endl;
}
静态成员函数与普通成员函数的差别就在于缺少this指针,
没有这个this指针自然也就无从知道name是哪一个对象的成员了。
***********************************************************************/
/************************************************************
声明为static的类成员或者成员函数便能在类的范围内共同享,
我们把这样的成员称做静态成员和静态成员函数。
下面实例来说明这个问题,每建立一个对象设置类静态成员变量自动加一
*************************************************************/
#include<iostream>
#include<cstring>
using namespace std;
class Internet
{
public:
Internet(char *name,char *address)
{
strcpy((*this).name,name);
strcpy(Internet::address,address);
count++;
}
static void print_count()//静态成员函数
{
cout<<"count is: "<<count<<endl;
}
void print_Internet()
{
cout<<"name is :"<<name<<" | "<<"address is : "<<address<<endl;
}
Internet &Return_this();
public:
char name[20];
char address[20];
static int count;//这里如果写成static int count=0;就是错误的
};
Internet& Internet::Return_this()//返回引用的成员函数
{
return *this;
}
int Internet::count = 0;//静态成员的初始化
void fn(Internet &s)
{
cout<<"Return_this().count:"<<s.Return_this().count;
}
int main()
{
cout<<"Internet::count: "<<Internet::count<<endl;//静态成员值的输出
Internet a1("清水河畔外网地址","bbs.qshpan.com");
a1.print_Internet();
Internet a2("王世晖的个人专栏","blog.csdn.net/shihui512");
a2.print_Internet();
Internet::print_count();//静态成员函数的调用
Internet b("王世晖CSDN博客","blog.csdn.net/shihui512");
b.print_Internet();
Internet::print_count();
fn(b);
}
/**********************
运行结果:
Internet::count: 0
name is :清水河畔外网地址 | address is : bbs.qshpan.com
name is :王世晖的个人专栏 | address is : blog.csdn.net/shihui512
count is: 2
name is :王世晖CSDN博客 | address is : blog.csdn.net/shihui512
count is: 3
Return_this().count:3
Process returned 0 (0x0) execution time : 0.172 s
Press any key to continue.
************************/
/******************************************************************
静态成员的初始化应该在主函数调用之前,
并且不能在类的声明中出现,静态成员count的状态并不会随着一个
新的对象的新建而重新定义,
尽而了解到类的静态成员是属于类的而不是属于对象的,
所以静态成员的使用应该是类名称加域区分符加成员名称的,
在上面的代码中就是Internet::count,
虽然仍然可以使用对象名加点操作符号加成员名称的方式使用,
但是是不推荐的,静态态类成员的特性就是属于类而不专属于某一个对象。
静态成员函数的特性类似于静态成员的使用,同样与对象无关,
调用方法为类名称加域区分符加成员函数名称,在上面的代码中就是Internet::Sc();
,静态成员函数由于与对象无关系,所以在其中是不能对类的普通成员进行直接操作的。
如果上面的 static void Internet::Sc()修改成为
static void Internet::Sc()//静态成员函数
{
cout<<name<<endl;//错误
cout<<count<<endl;
}
静态成员函数与普通成员函数的差别就在于缺少this指针,
没有这个this指针自然也就无从知道name是哪一个对象的成员了。
***********************************************************************/