c++笔记

c++:复制初始化用等号,直接初始化把初始化式放在括号中。

c++:初始化不是赋值。初始化“创建变量并给他赋初始值”。赋值“擦除对象当前值并用新值代替”

c++:引用只是它绑定的对象的另一名字,作用在引用上的所有操作事实上都是作用在该引用绑定的对象上,不可能将引用绑定到另一个对象。迭代器类型可使用解引用操作符(*)来访问迭代器所指向的元素

c++:类(默认情况下,struct 的成员为 public,而 class 的成员为 private。)

//公有继承:原封不动  对象可在外部访问
//私有继承:数据通过接口有条件使用  方法在对象外不能访问 ,在对象(类体)内可以访问
//保护继承:在类体内可以访问  在类体外不能访问
//方法和数据在对象中可以继承使用
//派生的可以转换为基类的  只能使用从基类继承的数据和对象
//不要重新定义继承来的非虚函数
//virtual  虚函数(编译时无法正确确定调用函数的函数体,运行时确定函数体。动态类型确定)属于对象,不属于类(在声明中使用)(实际类型,不是指针类型)
class(struct) class_name:public class_a(//参数列表),private class_b(//参数列表)
{
public:                     //外部可访问(程序中可访问)(struct默认的访问权限)
                            //构造函数
    class_name() = default; //依然生成默认构造函数
    class_name(int a, int b, int c, int d) : s(a), f(b), m(c), x(d) {}
    class_name() : class_name(0, 0, 0) {}     //委托构造函数(委托其他构造函数构造)
                                              //复制构造(默认的复制构造函数会复制全部值)(何时调用:1,用另一个同类对象创建新对象,2,函数的参数是类的对象做形实结合时,3,函数的返回语句返回类)
                                              //当不希望对象被复制时:c++98,将复制构造对象定义在private中。c++11,用=delete指示不生成默认复制构造函数
    class_name(const class_name &p) = delete; //指示不生成默认复制构造函数
                                              //移动构造
    class_name(class_name && p)               //两个&&代表绑定到右值(即将消亡的值)
                                              //析构函数
        ~class_name();
    virtual  int funv();                        //虚函数(在类外实现)
    static int num;       //类的静态成员(所有对象都共用一个静态成员,需要在类外初始化)
    static int get_num(); //类的静态函数成员(用于处理类的静态成员。可以通过类名和对象来调用)
                          //友员
    friend int dis() :    //友员 定义在外部可以访问类内部数据
                       friend class class_name1() : 友员类

                                                    int
                                                    print(); //一般函数成员
    int print() const;                                       //常成员函数(承诺不改变对象的状态)
private:                                                     //外部不可访问(类中可访问)(class默认的访问权限)
    int s, f, m;
    const int x; //常成员 可以在初始化列表内初始化,不能在函数体内初始化
protected:       //受保护
}

int arry[10] for (int &e : arry)                //for基于范围的遍历(容器优化)
    for (auto i = v.begin(); i != v.end(); ++i) //遍历

    //下列访问成员相同
    ptr -> obj;
(*ptr).obj;

//动态数组内存分配
int (*po)[2][3];
po = new[5][2][3];
delete[] po

    //类模板
    vector<int>
        arr(num); //arr对象有num个int

c++:容器:每个标准库容器类型都定义了一个名为 iterator 的成员。每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。每种容器类型还定义了一种名为 const_iterator 的类型,该类型只能用于读取容器内元素,但不能改变其值。

c++:vector(容器) 是同一种类型的对象的集合。把 vector 称为容器。vector 是一个类模板。通过下标操作进行赋值时,不会添加任何元素。仅能对确知已存在的元素进行下标操作。

c++:类模板:类型放在类模板名称后面的尖括号中来指定类型。如:vector<类型名> 。

c++:迭代器(iterator):迭代器是一种检查容器内元素并遍历元素的数据类型。每种容器类型都定义了自己的迭代器类型。迭代器使用自增操作符向前移动迭代器指向容器中下一个元素。支持算术操作。任何改变 vector 长度的操作都会使已存在的迭代器失效。

c++:bitset (用于位操作):在尖括号内给出它的长度值bitset<n>。

c++:new:如果 new 表达式无法获取需要的内存空间,系统将抛出名为 bad_alloc 的异常

c++:类中需要注意返回值类型(左值可以修改对象数据,右值是一个零时对象)(类中定义:point & fun(int x,int y);)

c++:智能指针(unique_ptr独占指针不允许其他指针指向,shared_ptr共享指针,weak_ptr可复制shared_ptr但它指向的对象的构造或释放对其本身(shared_ptr)不产生影响)

类型转换
引用https://blog.csdn.net/pyy18829518070/article/details/80077655
static_cast可以完全替代c的类型转换,而且在对对象指针之间的类型转换时,可以将父类指针转换成子类指针,也可以将子类指针转换成父类指针,但是如果两个类不相关则无法相互转换。 需注意的是,如果父类指针指向一个父类对象,此时将父类指针转换成子类指针虽然可以通过static_cast实现,但是这种转换很不安全;如果父类指针本身就指向子类指针则不存在安全问题。
dynamic_cast只能用于对象指针之间的类型转换,可以将父类指针转换成子类指针,也可以将子类指针转换成父类指针,转换结果也可以是引用,但是dynamic_cast不等同于static_cast。dynamic_cast在将父类指针转换为子类指针的过程中,需要对其背后的对象类型进行检查,以保证类型完全匹配,而static_cast不会。只有当一个父类指针指向一个子类对象,且父类中包含虚函数时,使用dynamic_cast将父类指针转换成子类指针才会成功,否则返回空指针,如果是引用则抛出异常。
const_cast转换过程中增加或删除const属性。
reinterpret_cast可以将一种类型的指针直接转换成另一种类型的指针,不论两个类型之间是否有继承关系。而且reinterpret_cast可以将一个指针转换为一个整数,也可以把一个整数转换成一个指针。reinterpret_cast还经常用咋不同函数指针之间的转换。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值