C++ 散记

1、C++特性

  • 封装:隐藏实现细节,代码模块化
  • 继承:派生类可以继承父类的数据和方法,并扩展已存在的模块
  • 多态:派生类重写父类的虚函数,实现接口的重用
  • 动态内存管理上,C++多了new/delete
  • C++中有了引用
  • C++支持函数重载
  • C++更加严格和安全,如const的正确性,指针和枚举的自动转换

2、virtual继承可以解决菱形继承带来的二义性

3、拷贝构造和赋值运算符重载

  • 拷贝构造函数生成新的类对象,赋值运算符不行
  • 拷贝构造生成新的类对象不用考虑源对象和新建对象是否相同,赋值运算符需要考虑这个,且需要把原来对象分配的内存释放掉

4、explicit显示构造

  • 常见的用explicit修改的单参构造函数对应的类有vector、shared_ptr

5、C++常见关键字的使用

5.1 派生访问说明符

class teacher : public person {
    /*...*/
};

5.2 explicit 显示调用

class Sales_data {
public:
    Sales_data() = default;
    //explicit只能修饰单参构造函数
    explicit Sales_data(std::stream&);
};

//error 只能在类内声明构造函数时添加explicit关键字
explicit Sales_data::Sales_data(std::stream& is) {
    read(is, *this);
}

5.3 final 

//不希望某个类被继续继承或者某个虚函数被继续重写
//1.修饰类
class Base {
    /*...*/
};

class A : public Base {
    /*...*/
};

//指明B不能被继续继承
class B final : public Base {
    /*...*/
};

//2.修饰虚函数
class Base {
public:
    virtual void foo() = 0;
};

class A : public Base {
public:
    void foo() final;
}

5.4 const

//1.修饰变量 以*为准,左定值,右定向,const修饰不变量
int a = 8;
const int * const p = &a;

//2.修饰函数 防止成员函数修改被调用对象的值
class Base {
public:
    int getdata() const {
        return data;
    }
private:
    data;
}

5.5 static 

//修饰类中的变量或方法,表明为类变量/类方法 只需要类内声明 类外定义不需要添加
class Base {
public:
    static void foo();
    static int cnt;
};

void Base::foo() {
    /*...*/
}

int Base::cnt = 0;

5.6 inline

//inline是一种用于实现的关键字,函数声明和定义分开时,inline要和定义放在一起
class Base {
public:
    void foo(int x, int y);
};

inline void Base::foo(int x, int y) {
    /*...*/
}

6、构造函数和析构函数中可以调用虚函数吗

  • 首先两个函数中可以调用虚函数,编译器不会报错
  • 由于类的构造是由基类到派生类,因此在基类的构造函数调用虚函数不会呈现多态
  • 类的析构是由派生类到基类,基类析构时派生类已经完成析构了,因此基类的析构函数中调用虚函数不会呈现多态
  • 另外基类的构造、析构中调用纯虚函数会报错

7、左值与右值

  • 占确定内存空间的对象为左值
  • C++规定非const左值引用不能被赋右值
  • 常量左值引用可以赋右值,因为const修饰的引用不能修改
  • std::move可以将一个左值引用转换为右值引用

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值