C++周总结-引用、面向对象(构造、静态、拷贝)、初始化列表

C++周总结

一 、引用

  • 引用本质是指针常量
    最开始定义的时候就需要初始化,且不能修改引用的指向。
int &b = a; //初始化
int c = 20;

b = c; //此为赋值操作,不是修改指向
  • 引用作为函数返回值
  1. 不能返回局部变量的引用
  2. 函数引用可以作为左值

函数默认参数

  • 函数声明和函数实现中只能有一个地方有默认值
  • 在函数重载时候,少用默认参数,避免出现二义性
//应当避免这种情况
void func(int a, int b = 10)
{
    
    
}
void func(int a)
{
    
    
}

重载运算符

  • 以重载+为例,实现两个box对象相加
//在类里重载
Box operator(const Box& b);

//在类外
Box operator(const Box& a, const Box& b)

访问修饰符

  • private:只有类里面可以访问
  • protect:子类,自己可访问,类外不可
  • public: 所有均可访问

对类文件拆分

  • 头文件里定义类,而且函数方法只写声明
  • cpp文件里写函数实现方法, 并且需要写作用域
int MyClass::getClassMember()
{
    
    

}
  • #pragma once 放在cpp里,防止头文件重复包含

构造函数调用

显示法
Person p1;
Person p2 = Person(10);
Person p3 = Person(p1);

隐式法
Person p1;
Person p2 = 10;
Person p3 = p1;

括号法
Person p1;
Person p2(10);
Person p3 (p1);
  • 拷贝构造函数
Person(const Person &p)
{
    
    

}
  • 当有了有参构造函数,编译器就不再提供默认构造函数
  • 当有了自定义拷贝构造函数,就不会提供其他构造函数

深拷贝与浅拷贝

浅拷贝可能会带来堆区内存重复释放的问题,比如一个对象有个指针,那么他的浅拷贝(默认拷贝构造函数)的对象里的指针指向的内存和原来的对象里指针指向的内存是同一片空间。

Person (const Person &p)
{
    
    
	age = p.age;
	height = new int(*p.height);
}

初始化列表

代码简洁些
在这里插入图片描述

Person (int x, int y, int z):a(x), b(y), c(z)
{
    
    
}

对象最为对象成员

  • 先构造成员类,再构造自己
  • 先析构自身,再析构成员

静态成员函数,变量(对象)

  • 所有对象共享同一个函数
  • 静态成员函数只能访问静态成员变量,不能访问其他变量
  • 静态成员函数调用
Person::func();

//或者
Person p;
p.func();
  • 静态成员变量
    (1)类内声明,类外赋值
    (2)所有对象共享同一份数据
  • 只有非静态变量的内存才会挂在对象上
  • 空对象大小为1字节
  • tips: C++继承中,可以继承多个父类

猜你喜欢

转载自blog.csdn.net/foolbirdM/article/details/120815748