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 #
}
类的静态成员: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、计算体积和