2016年6月20日学习日记第三讲this指针

2016年6月20日学习日记第三讲this指针
this指针:每一个对象都’包含’一个指针,指针指向了对象本身。
‘包含’:不计算内存空间大小
(this->x or (*this).x)

this:作用
1)方便辨别形參和实參
eg:

point(int x,int y){
        this->x = x ;
        this->y = y;
    }

2)函数链
eg:
CPoint.cpp

CPoint& CPoint::setX(int x)
{
    this->x=x;
    return *this;
}
CPoint& CPoint::setY(int y)
{
    this->y=y;
    return *this;
}
void CPoint::Print()
{
    cout<<"x = "<<this->x<<" y = "<<this->y<<endl;
}

main.cpp

CPoint p1(1,2);
    p1.Print();
    p1.setX(100).setY(200);
    p1.Print();

如果返回类型是值返回的话 只能改变x也就是第一个函数,后面的函数只能改变临时变量的值,不能改变当前对象p1的内容。

C中static
static局部变量:函数结束,内存不会被释放、多次调用函数不会重复初始化、使用
static全局变量:函数结束,内存不会被释放,多次调用函数不会重复初始化,使用的值为上次函数退出时保留值。生命周期延长,作用域不变。仅可以使用在当前函数中。程序结束释放内存

int * func(){
    static num=100;   //延长num的生命周期,避免野指针的产生
    return &num;
    }

类的静态成员:C++类的静态成员(静态成员变量,静态成员函数)
类的静态成员在计算机中只有一份内存空间,不会像普通成员创建对象开辟新空间。
在计算机中类的静态成员属于整个类,不属于某一个对象

employee
{
    name;
    age;
    static boss;
}

p1 caoying 22 老冉
p2 laoli 22 老冉
访问类的静态成员: 类名::静态成员(对象.静态成员)
静态成员的初始化:类外以函数形式初始化
静态成员函数访问:静态成员只能访问静态成员变量

员工类:体现静态成员变量和静态成员函数

一般是不会通过对象来访问类的静态成员的,虽然不会出错
Employee.hpp

#ifndef Employee_hpp
#define Employee_hpp

#include <stdio.h>
class Employee
{
private:
    char *name;
    int number;
    static int allNumber;//公司来控制的编号
    static int allPays;//公司每月付出的薪水
    int pay;
public:
    Employee(char *name);
    ~Employee();
    void print();
    static int getAllNumber();
    static int allPay(int pay);

};
#endif

Employ.cpp

#include "Employee.hpp"
#include <string>
#include <iostream>
using namespace std;

int Employee::allNumber=0;
int Employee::allPays;


Employee:: Employee (char *name){
    this->name = new char[strlen(name)+1];
    strcpy(this->name, name);
    this->number = allNumber++;
}
Employee::~Employee(){
    if (name != NULL) {
        delete []name;
        name=NULL;
    }
}

void Employee::print(){
    cout<<"name = "<<this->name<<endl;
    cout<<"number = "<<this->number<<endl;
    cout<<"allpays = "<<this->allPays<<endl;
}
int Employee::getAllNumber()
{
    //number=100;  error静态成员函数不能使用非静态成员变量
    return allNumber;
}
int Employee::allPay(int pay){
    return (allPays += pay);
}

main.cpp

  Employee e1((char*)"caoyang");
    e1.allPay(20000);
    e1.print();
    Employee e2((char*)"cq");
    e2.allPay(20000);
    e2.print();

/*学生类:姓名,性别,年龄,教室(静态)
构造函数,析构函数,输出函数
学生总人数函数(静态),学生总学费函数(静态)*/
友元:1、友元函数 2、友元类
友元:可以直接访问私有成员(破坏了数据安全)
友元函数:friend、友元函数不是成员函数
成员函数调用:对象.函数名
普通函数调用:函数名

长方形:属性:长、宽
行为:构造函数、面积函数、输出
长方体(是长方形的友元类):属性:长方形、高
行为:构造函数、体积函数、表面积函数、修改长宽高函数、输出
长方体的友元函数:1、比较体积大小
2、计算体积和

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值