首页 >> 大全

特2:全局 const 变量的作用域仍然是当前文件

2023-12-30 大全 32 作者:考证青年

文章目录

前言

提示:以下是本篇文章正文内容,下面案例可供参考

特1:C++中的 const 分为编译时常量与运行时常量

>.初始式是常量表达式的 const 对象称为 编译时常量 否则称为 运行时常量

>.编译时常量编译阶段就执行值替换了 值替换的过程类似宏展开

特2:全局 const 变量作用域仍然是当前文件

>.这和添加了关键字的效果类似

一、默认参数与无名形参 二、函数的重载 三、构造函数初始化列表 四、类的成员和const成员

成员函数

const 成员变量

const 成员函数

自身类型的静态成员

#include 
using namespace std;
class B{
public:const static B static_self;double length {1.0};double width {1.0};double height {1.0};B(double a,double b,double c):length{a},height{c} { };B(double side):B(side,side,side) {};  //委托构造函数static void show(){};
};
const B B::static_self(2.2); //必须在类外定义 类内声明
int main() {cout<<B::static_self.height<<endl; //2.2
}

也可以将它定义成非const 类型的这样就可以修改了

五、const 对象 六、类的作用域 七、 关键字 类 八、封闭类和继承中各构造函数和析构函数执行先后 单继承情况下

>.派生类必须要在其构造函数初始化列表指明其成员对象和基类如何初始化(有默认构造能力的成员对象和基类构造函数可以不用指明) 多继承情况下 虚继承情况下 九、继承与派生

>.继承与派生是一个概念,只不过站的角度不同

虚继承:

向上转型(将派生类赋值给基类):

十、多态 () 虚析构函数: 虚函数表: 十二、抽像类与纯虚函数 抽像类: 十三、引用 十四、RTTI (Run-Time Type ) 十五、运算符重载( ) 十六、模板

类模板:

显示专门化( )

非类型参数:

模板特性 : \bf{\color{red}{模板特性:}} 模板特性:

显示实例化:(多文件编程)

>.显示实例化后 就可以把模板的声明和定义分开到不同的文件中了

类模板和模板类的概念

模板的继承与派生

模板参数的作用域:

#include 
#include 
using namespace std;
template <class T1, class T2>
class Pair
{
private:T1 key;  //关键字T2 value;  //值
public:Pair(T1 k, T2 v) : key(k), value(v) { };bool operator < (const Pair<T1, T2> & p) const;//如果用T1 T2 那将报错,declaration of template parameter 'T1' shadows template parametertemplate <class T3, class T4>//函数模板作友元friend ostream & operator << (ostream & o, const Pair<T3, T4> & p);
};
template <class T1, class T2>
bool Pair <T1, T2>::operator< (const Pair<T1, T2> & p) const
{  //“小”的意思就是关键字小return key < p.key;
}
template <class T1, class T2>//这就是模板的作用域
ostream & operator << (ostream & o, const Pair<T1, T2> & p)
{o << "(" << p.key << "," << p.value << ")";return o;
}
int main()
{Pair<string, int> student("Tom", 29);Pair<int, double> obj(12, 3.14);cout << student << " " << obj;return 0;
}

类模板与友元

#include 
using namespace std;
template<class T>
class A
{
public:void Func(const T & p){cout << p.v;}
};
template <class T>
class B
{
private:T v;
public:B(T n) : v(n) { }template <class T2>friend class A;  //把类模板A声明为友元
};
int main()
{B<int> b(5);A< B<int> > a;  //用B替换A模板中的 Ta.Func(b);return 0;
}

类模板中的静态成员

#include 
using namespace std;
template <class T>
class A
{
private:static int count;
public:A() { count ++; }~A() { count -- ; };A(A &) { count ++ ; }static void PrintCount() { cout << count << endl; }
};
template<> int A<int>::count = 0;
template<> int A<double>::count = 0;  //不同的模板类中的静态成员是不同的内存
int main()
{A<int> ia;A<double> da;
//    A f; error: undefined reference to `A::count'ia.PrintCount();da.PrintCount();return 0;
}

十七、 如此,func() 函数就不能抛出任何类型的异常了,即使抛出了,try 也检测不到. 多态时派生类异常规范只能比基类限制更多(少一个参数),后来的 C++11 已经将它抛弃了,不再建议使用。 十八、copy构造函数 十九、四种类型转换关键字 二十、函数对象 二十一、 二十二、内联函数 二十三、函数的可变参数 To be … 总结

late than never

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了