#include<iostream>
#include<cstring>
using namespace std;
class Person{
public:
/*函数声明*/
Person(string name="", int id=0);//{
// _name = name;
// _id = id;
// }
void show() const;//{
cout<<"Name:"<<_name<<endl;
cout<<"ID :"<<_id<<endl;
// }
int getnumberofpersons(){
return numberOfPersons;
}
Person(const Person&another):_id(another._id+1){
_name = another._name;
numberOfPersons++;
cout<<"the "<<numberOfPersons<<" is copied.\n";
}
~Person(){
numberOfPersons--;
}
private:
string _name;
const int _id;/*限定常量,称为常数据成员,一旦给值不在更改,不能通过普通的函数成员修改*/
static int numberOfPersons;
};
int Person::numberOfPersons = 0;
inline void Person::show() const{/*若函数没有修改变量,则可以定义为常函数。即使数据不是常数据,在常函数内也无法修改。常函数和不是常函数的函数也能构成重载。*/
/*重载两种方式,参数表,常函数和非常函数*/
cout<<_name<<" "<<_id<<endl;
}
Person::Person(string name,const int id):_id(id){/*在类之外,函数定义。常函数成员的初始化不能放在函数内,常成员函数的初始化放在类的初始化函数中。*/
/*:_id(id)成员初始化列表,常数据之能这样,其他不仅可以这样,也可以在函数内初始化*/
/*统计类的使用次数*/
numberOfPersons++;//统计类的使用次数
_name = name;
// _id = id;
}
int main()
{
// string name;
// int id;
// cin>>name;
// cin>>id;
// Person p1(name,id);
// Person p2(name,id);
// p2.show();
// p1.show();
// int i;
// cin>>i;
// /*但如此可以改变*/
// const double pi=3.14 * i;/*不可变变量*/
// cout<<pi<<endl;
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------*/
int a = 10;
/*const与 * 的位置决定我们定义了什么东西,const与int的位置无关*/
const int *p;/*p指向的是个常数,可以改变指向变量的地址,不能改变指向变量的值*/
int const *q;/*与p同理*/
int *const r = &a;
/*表示r本身是个常数,不能改变指向变量的地址,可以改变r指向的变量的值*/
p = &a;
q = &a;
//r = &a;
/*只能在定义时对r附初值,如不则会报错r未初始化,因为r本身是一个常量,若让r指向a,则应改为 int *const r = &a;*/
/*试图去修改a的值*/
//a = 20;
//*p = 20;
/*不能通过p改变a,p把它指向的东西认为了常数,与a是不是常数无关,p与q同理。*/
//*r = 50;
//int b=50;
//p = &b;
/*可以改变p q指向谁,但不能改变p q指向的东西*/
cout<<*p<<" "<<*q<<" "<<*r<<endl;/*报错r未初始化*/
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*常成员函数谁都能用,但常对象只能调用常成员函数*/
/*常对象*/
const Person p5("lisi",324);
/*常对象只能调用常成员函数*/
p5.show();
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*无对象直接使用*/
//cout<<Person::numberOfPersons<<endl//无对象直接使用
Person p2("wang",123);
cout<<p2.getnumberofpersons()<<endl;
/*-----------------------------------------------------------------------------------------------------*/
Person p1("zhang",1);
/*拷贝构造函数:用已经存在的对象初始化新的对象,c++会帮我们实现默认的拷贝构造函数*/
Person p3(p1);
p3.show();
}
/*-----------------------------------------------------------------------------------------------------*/
/*静态成员又称为类成员,静态成员是属于整个类的,静态成员在类之间是共享*/
/*用途:
1. 定义类的常数
2. 统计这个类产生了多少个对象
初始化:在类的定义体之外初始化
*/
笔记:第三次课堂
最新推荐文章于 2024-09-23 14:30:32 发布
这篇博客探讨了C++中的类和对象,重点在于拷贝构造函数的使用,常量成员的声明与初始化,以及静态成员的功能和统计类实例数量的应用。通过示例代码解释了如何创建和使用常对象以及静态成员的初始化。此外,还讨论了指针与常量的关系,展示了如何通过指针操作常量和变量。
摘要由CSDN通过智能技术生成