#if 1
class A
{
public:
A()=default;//A() {}跟默认的类似但是可以修改
A(consg A& that)=delete;
int m_a {20};//大括号赋值
};
auto add(int a,int b)->int
{
return a+b;
}
class B
{
public:
B(int a,int b,int c):m_a(a),m_b(b),m_c(c){}
B():B(10,20,30){}
B(int a):B(a,40,50){}
void print()
{
cout<<m_a<<" "<<m_b<<" "<<m_c<<" "<<end;
}
private:
int m_a;
int m_b;
int m_c;
};
class C
{
public:
virtual void foo(int)
{
cout<<"C::foo"<<endl;
}
virtual void barr()final
{
}
};
class D:public C
{
public:
virtual void foo(double) override
{
cout<<"D::foo"<<endl;
}
void barr()
{
}
};
class E final{};
class F:public E{};
int main()
{
//新增类型
long long 11_num=10;
cout<<sizeof 11_num<<endl;
unsing long long u11_num;
char16_t c16;
cout<<sizeof c16<<endl;
char32_t c32;
cout<<sizeof c32<<endl;
//2 nullptr空指针 NULL是0 不符合逻辑
int *p=nullptr;
cout<<p<<endl;
//3 类型别名
using dtype =int;
dtype dt=20;
cout<<typeid(dt).name()<<""<<dt<<endl;
//4 auto类型修饰符
auto ai=10;
cout<<typeid(ai).name()<<""<<ai<<endl;
auto as="你好";
cout<<typeid(as).name()<<""<<as<<endl;
//5 类内初始化
A a;
cout<<a.m_a<<endl;
int num{10};//大括号代替等号
cout<<num<<endl;
int arr[]{1,2,3,4,5};
for(int i=0;i<5;++i)
cout<<arr[i]<<endl;
//6 范围for循环
for(auto i:arr)
{
cout<<i<<" ";
}
cout<<"\n";
//7 返回类型后置
cout<<add(3,4)<<endl;
//8 默认函数
//9已删除函数
//10委托构造函数
B b;
b.print();
B b1(20);
b.print();
//右值引用
int num=10;
int &lnum=num;//左值引用
int &&rnum=10;//右值引用
//用处 运动语义
B b2=b;
//C++11 运动构造 移动数据 直接把b的数据移动到b2 b里面就没有了
//12 lambda表达式
auto sum=[](int a,int b){return a+b;}
cout<<sum(1,3)<<endl;
//智能指针 类做成指针功能不需要释放 会析构
int *ptr=new int(1);
delete ptr;
//unique_ptr
//shared_ptr
//14 override 确保成功覆盖
C *pc=new D;
pc->foo(2.3);
//15 final
//类被final修饰 不能被继承
//虚函数被final修饰 不能重载
return 0;
}
#endif
C++11
最新推荐文章于 2024-09-16 17:46:36 发布