C++学习之路--4

一、静态成员变量和函数

  • 加入static就是静态成员变量,会共享数据
  • 静态变量成员在类内声明,类外进行初始化。
  • 静态变量成员也是有权限的
  • 静态成员函数不可以访问普通变量
  • 静态成员函数也是有权限的

二、单例模式

  • 为了让类中只有一个实例,实例不需要自己释放
  • 将默认构造和拷贝构造私有化
  • 内部维护一个对象指针
  • 私有化唯一指针
  • 对外提供getinstance 方法来访问这个指针。

三、对象模型

  • 空类大小为1,每个实例的对象都有一个独一无二的地址。char维护这个地址。
  • 只有非静态成员属性才属于对象
  • this指针永远指向当前对象,解决当前冲突
  • 如果成员函数没有用到this ,那么空指针可以直接访问,
  • 如果成员函数用到this指针,就要注意可以加if 判断

四、常函数常对象

常函数

  • void func() const{}
  • 修饰是this指针,const type * const this
  • 不能修改this指针执行的值

常对象

  • 在对象前加入const 修饰const Person p1
  • 不可以调用普通的成员函数,可以调用常函数
  • mutable修饰的关键字在常函数中可以修改

五、友元

友元关系是单向的
全局函数做友元---->目的是访问类中的私有属性,friend
类做友元---->friend class

六、重载运算符

  • 如果想让自定义数据类型进行+号运算符,那么就需要重载+运算符。
//修改加号运算符
class Person
{
public:
	Person() {};
	Person(int a,int b):m_A(a),m_B(b){};
	Person operator+ (Person &p) //成员函数重载运算符
	{
		Person tmp;
		tmp.m_A = this->m_A + p->m_A;
		tmp.m_B = this->m->B + p->m_B;
	}
	int m_B;
	int m_A;
};

//利用全局函数进行运算符重载
Person operator(Person &p1,Person &p2)
{
	Person tmp;
	tmp.m_A = this->m_A + p->m_A;
	tmp.m_B = this->m->B + p->m_B;
}
Person p3 = p1+p2;
  • 左移运算符重载不可以写咋成员函数中,只能用全局函数
ostream& operator(ostream &cout, Person &p1) //引用返回
{
	cout << p1.m_a << p1.m_b;  //当m_a为私有时,需要加友元friend
	return cout;
}
void testFunc(int &ref) //发现是引用,转换为int *const ref = &a
{
   ref = 10; //ref 是引用,转换成*ref = 10;
}
  • 前置后置运算符
//前置++
MyInter operator++()
{
	this->num++;
	return *this;
}
//后置++
MyInter operator++(int) //int 为占位参数,区分前后置
{
	//临时保存目前数据
	MyInter tmp = *this;
	num++;
	return tmp;
}
  • 智能指针,用来托管自定义类型的对象,让对象进行自动的释放。
class Smart
{
	Smart pointer(Smart *pointer)
	{
		this->pointer = pointer;
	}
	
private:
	Smart *pointer;
};
void test()
{
 	Smart s(new Person(10))
 	s->showage //重载->运算符
}
  • = 重载
  • 一个类默认创建默认构造、析构、拷贝构造、operate=赋值运算符进行简单的值传递

猜你喜欢

转载自blog.csdn.net/weixin_43615373/article/details/90340092
今日推荐