笔记:第三次课堂

这篇博客探讨了C++中的类和对象,重点在于拷贝构造函数的使用,常量成员的声明与初始化,以及静态成员的功能和统计类实例数量的应用。通过示例代码解释了如何创建和使用常对象以及静态成员的初始化。此外,还讨论了指针与常量的关系,展示了如何通过指针操作常量和变量。
摘要由CSDN通过智能技术生成
#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. 统计这个类产生了多少个对象
    初始化:在类的定义体之外初始化
            */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值