C++ —— 入门

来源:互联网 发布:ebrary电子书数据库 编辑:程序博客网 时间:2024/06/06 03:31

面向过程和面向对象

面向过程(SP):分析实现步骤,编写函数,用函数一个个实现。
面向对象(OOP)将数据结构和对数据结构处理的方法封装成一个个对象

new、delete

  • new 运算符 可以用于创建堆空间
    例如:
    int *p; p=new int;
    char *pStr=new char[50];
  • delete运算符 可以用于释放堆空间
    例如:
    delete p;
    delete [] pStr;
  • 和malloc/free的区别
    1.new/delete会调用构造函数和析构函数分配内存,malloc/free不会
    2.new自动分配内存,并且强制转换;malloc自定义分配大小,并且要自己转换
    3.new/delete是运算符,malloc/free是函数

内联函数(inline)

//提高效率,小代码、频繁使用时使用内联函数inline int add1(int a, int b){    return a + b;}

类(class)

//在C++中用class定义的类中,其成员的默认存取权限是private;//在C++中用struct定义的结构体中,其成员的默认存取权限是public;class A{    void func(); //方法public:    int a; //属性或数据成员};

构造函数

  • 多个对象的开辟:
    共用一份方法,开辟多份属性
  • 作用:(允许函数重载,并且只能调用一次)初始化,构造函数要声明为public
  • 分类
    默认构造函数(没有参数或者一个默认参数的构造函数,如果没有构造函数,系统会自动生成默认构造函数)
    普通构造函数(有两个或以上参数的构造函数)=重载构造函数
    拷贝构造函数
    • 何时调用:
    • 1.当用类的一个对象初始化该类的另一个对象时 (a=b)
    • 2.如果函数的形参是类的对象 (func(a;))
    • 3.如果函数的返回值是类的对象 (retrun a;)
    • 4.是类的构造函数的传参(b(a))
/*********1.默认构造函数************/class CBase{public:    //当对象被开辟,构造函数被调用,(自动调用)    CBase()    //构造函数(初始化)    {         cout << __LINE__ << " " << __func__ << endl;            //         a = 1;         b = '.';    }    void func()    {  } public:    int a;    char b;};int main(){    cout << __LINE__ << " " << __func__ << endl;    //初始化    //    CBase obj = {10, 'a'};    //赋值    //    obj.a = 5;    CBase a;    CBase b;    cout << a.a<< endl;    cout << a.b  << endl;    return 0;}/*********2.拷贝构造函数******************/class CBase{public:    //构造函数    CBase()    {        cout << __func__ << "    " << __LINE__ << endl;    }    //拷贝构造函数(当obj1 = obj2时使用,当属性里面有指针要注意析构函数的重复调用)    //1.默认拷贝构造(进行属性成员的copy)    //2.自定义拷贝构造(属性成员可以修改)    //拷贝构造函数的应用(1.cbase a; cbase b=a;       2.cbase a;cbase b(a); 3 func(obj); ///4.)    CBase(const CBase &obj) //格式    {        cout << __func__ << "    " << __LINE__ << endl;    }    ~CBase()    {        cout << __func__ << "    " << __LINE__ << endl;    }public:    int v;};//临时调用空间拷贝void func(CBase obj){}//不调用空间拷贝void func2(CBase &obj){}//func3内存被弹掉,所以不会拷贝//CBase func3()//{//    CBase a;//    return a;//}CBase func3(){    static CBase a;    return a;}CBase &func4 {    CBase b;    return b;}int main(){    CBase obj;    //拷贝1//    CBase obj2 = obj;    //拷贝2//    CBase obj2(obj);    //拷贝3//   func(obj);////////////////////////////////////////////////////    //4不会拷贝//    func2(obj);    //拷贝5//    CBase b = func3();    //拷贝6    CBase b = func3();    return 0;}
  • 深拷贝和浅拷贝
    • 深拷贝
      深拷贝
    • 浅拷贝
      浅拷贝

初始化列表

1.const
2.引用
3.父类构造函数需要形参
4.数据成员是另一个类的对象,这个类构造函数需要形参
这里写图片描述

命名空间

using namespace std;(使用标准std命名空间)namespace A  //命名空间{}

this指针

A(int v) //构造函数{    this->v = v; //this->v是类的属性}

const和静态成员

非静态成员或者方法依赖对象才可以访问

class A{public:    int a; }Cbase obj;obj.a = 1; //a是非静态成员,依赖对象obj//不可以A::a = 1;

类的静态成员(数据成员和方法成员(函数))不允许调用非静态成员
非静态成员可以调用静态成员
———因为非静态成员依赖对象,有开辟空间
所以在外部,非静态成员不依赖对象可以直接调用

const成员不能调用不允许调用非const成员
非const成员可以调用const成员
——–因为const不能修改

继承

  • 多重继承(继承多个类)
  • 构造和析构函数不参与继承
  • 三种继承方式
    public (参与继承,都可以用) –(基类是什么属性,子类就是什么属性)
    protected (参与继承,子类基类可用,外部不可以使用) – (基类是public,子类变为protected,其他不变)
    private(不参与继承,子类和外部都不可使用) – (不管是什么,全部变为private)

虚函数、虚继承

  • 虚继承作用:解决多继承二义性,继承者共用一份数据

重载、重定义(隐藏)、多态(覆盖)

  • 重载(同一类中,函数名一样,参数不一样)
  • 重定义(1.不同类,函数名一样,参数不一样;或者2.不同类,函数名一样,参数一样,没有virtual)(隐藏掉子类的成员)
  • 多态(不同类,函数名一样,参数一样,子类继承父类,基类函数是虚函数)(覆盖父类) —
    实现多态,还需要基类的指针指向子类
    CBase cobj;
    SBub sobj;
    CBase *pc = &sobj;
0 0
原创粉丝点击