c++知识点总结

作者:风筝 | 创建时间: 2023-06-23
c++知识点总结

操作方法

1. 命名空间:避免命名冲突    使用方式:    using namepace A;                A::a; 2.  static总结: 修饰变量: 使局部变量的内存在全局区,(延长局部变量的生命周期) 使全局变量,不能在另外一个文件中使用extern 声明访问(缩小全局变量的作用范围) 修饰函数: 使函数,不能在另外一个文件中使用extern 声明访问 静态函数与变量:    静态函数中的变量,必须是静态的 静态函数中的函数,必须是静态的 c++中静态函数,静态变量属于类,可通过类名访问,也可通过对象访问 类中,静态变量的初始化必须放在类外 注意:const与static同时修饰的变量:在类外进行初始化 3,常对象,常函数:const 常对象调用常函数,   (this) 非常对象调用 非常函数,常函数 为什么常对象,不能调用非 常函数?   (非常函数的this指针) static 不能修饰 常函数 --  const 不能修饰静态函数 非常对象,优先调用非常函数 4常函数既可以被非常对象调用,又可以被常对象调用,那是不是全部都写常函数可保万无一失?              都写常函数,意味着,对象的属性就不可以自由改变了, 常函数中改变对象的属性值的方法, 1,mutable修饰成员变量 2,const_cast<>(this)去除常属性 2 当返回类型 是一个非常对象的引用的时候,只能用 非常函数了 常函数既可以被非常函数调用,又可以被常函数调用 常函数调用非常函数,会出错  (参数 const this -> this 会出错) 4 const 想关见解: c语言中:使变量只读,不可修改(修饰指针,指针变量,一般变量) 可修饰参数,修饰返回值 c++语言中:除了c中的特点, 修饰对象 使函数变成常函数(使this变成const) const修饰参数的目地: 1,使参数只读,不可修改(编译器提示性的限制) 2,支持常对象作为参数(常对象不可隐式转成 非常对象) 常对象做参数:传入的实参对象,既可以是常对象,有可以是非 常对象(隐式转换) 非 常对象做参数:传入的实参对象,只能是非 常对象(则不支持常对象作实参) const可以优化效率 const int a=10; cout<<a<<endl;//直接当成常量使用,不再从内存中读取数据 5.对象创建与析构过程 对象的创建: 1 为整个对象分配空间 2 构造基类部分(默认调用无参构造)  /或初始化列表构造 3 构造成员变量(初始化)           /或初始化列表构造 4 执行构造函数中的代码 (构造函数体{}中,不是成员变量初始化的地方) 析构:1 执行析构函数中的代码 2 销毁(析构)成员变量 3 析构基类部分 6.必须使用初始化列表的情况 1const 成员变量 2引用类型的变量 3继承关系的类,想以有参构造函数构造基类的时候 注意:const与static同时修饰的变量:在类外进行初始化 7.必须显示 使用this的情况 1形式参数,和成员变量名字相同时,(形式参数会隐藏成员变量) 2想在常函数中,对成员变量重新赋值时(去掉this的const属性) 3在类中的成员函数中想返回尚未创建的对象或对象的指针时 4在类中,把尚未创建对象作为参数,传给另一个函数 (教师,学生类间的信息通信) 8.this的类型,和实际指向的对象没关系,和当前this所在的类有关 class A{ void foo(){ bar();//this.bar();编译时,静态绑定本类的bar函数 } void bar(){} } class B:public A{ void bar(){} } int main(){ A a=new B; a.foo(); } 9.动态绑定:(运行时绑定) A B:A A* a = new B; 虚函数表的指针,存在B对象中 (虚函数,对象的类型信息等) 优点:多态,动态绑定,基类指向子类,相同的调用,根据实际对象的不同,可以灵活执行不同的动作。                                        (相同的行为,不同的表现) 缺点:(多占内存,速度降低) 虚函表的指针,指向的一系列 虚函数数组  (多占内存) 执行是动态绑定,多了一些步骤(确认类型,匹配虚函数,找地址) 虚函数,不能内联,由于编译期不绑定具体函数 (不能内联优化速度) 使用建议:(是否需要虚函数,是否需要写继承) 要使用多态效果的时候,考虑虚函数,其他的不考虑 使用多态效果的时候,考虑继承,其他的使用组合关系 10.面向对象的三大特征 封装:私有对象的属性,不让外界直接访问(对象可以在类内部直接访问私有属性)                 protect/public 友元函数/友元类 (只是能让类外的对象访问类的私有属性) 继承:可以使用父类的属性和方法 多态(重写):基类指向不同的子对象,相同的行为,会有不同的表现(实际子对象的表现) 重写/覆盖:override(父子类-不同作用域) 重载:overload(同一作用域) 隐藏:(不同作用域) 12,缺省参数 注意事项:重载匹配时,如果既可以调用缺省函数,又可以调用一个非缺省的函数,就引起编译错误 13,时间函数 time_t time(time_t* t)//参数为0,可获得一个秒数(系统时间-1970-1-1 0:0:0) struct tm* localtime(const time_t*)//可以获得时间结构体 tm_year=(系统时间的年-1900)// tm_month=(系统时间的月+1) 14,单例模式 饿汉式,懒汉式 饿汉式:类加载时,直接构造了一个静态栈对象,每次调用静态函数时,都返回这个静态对象的引用 懒汉式:类加载时,只构造了一个静态指针,当需要创建一个对象时,  才调用一个静态函数创建一个对象,也返回这个对象的引用, 以后再调用这个静态函数,就不再创建新对象,只返回第一个对象的引用 懒汉式存在线程安全问题 15异常:    try{}catch(exception ){}多层catch时,子类要放在基类的前面发生异常时,跳到有花括号{,会自动调用catch到的异常类的析构函数 16 钻石继承:     A B   C D B:virtual public A虚表:当前地址的偏移地址和虚函数表: 17    构造函数:创建新对象 拷贝构造:根据旧对象,创建新对象 拷贝赋值:用一个对象,给另一个对象赋值 18 参数传递方式比较:引用,指针,值传递 引用,指针 vs 值传递: 引用和指针不会建立建立对象的副本,不会引起拷贝构造出一个新对象, 引用vs指针 引用比指针使用方便, 运算符重载的时候,返回引用比返回指针,书写的形式上更加流畅。

点击展开全文

更多推荐