//1.C++引入命名空间
namespace mynamespace{//第一次创建
void myfun(){
}
}
namespace mynamespace{//第二次使用,可以新增函数和代码
}
mynamespace::myfun();//调用
//1.2 引入命名空间
#include mynamespace.h
using mynamespace;
myfun();
//2.1 输入和输出
std::cout << first << second << std::endl;//输出firstsecond
std::cin >> value1 >> value2;//接受两个输入值,赋值给value1和value2
//3 变量别名,公用同一段内存,也就是php的绝对引用
int age = 18;
int ©age = age;
4 常量
const myconst = 1;//不能用变量赋值,比如const myconst = aaa; 是不行的
constexpr myconst2 = 2;//预编译的常量
constexpr int myfun(){
int abc;
for(i=0;i<10;i++){
std::cout << i << std::endl;//报错,表达式必须包含常量值
}
return 5;
}
constexpr int myconst3 = myfun();//不允许,其中int abc未初始化
//字符拷贝 strcopy_s取代strcopy
//5 分配内存 new/delete 取代 malloc/free
//6 函数声明类型后置
auto myfun(int a,int b)->void;//函数声明
auto myfun(int a,int b)->void//函数定义
{
return;
}
//7.1 vector 容器关键字,类似结构
//7.2 const常量关键字,const值不可改变
vector<int> vecvalue{1,2,3,4,5};
//7.3常量迭代器
const vector<int>::iterator iter;
//7.4 begin,end返回常量迭代器
for (auto iter = iv.begin();iter != iv cend(); ++iter){
cout << *iter << endl;
}
//7.5 迭代器失效,不要在循环时修改数据
for (auto vecitem : vecvalue){
//改变vecitem的值会报错
cout << vecitem << endl;
}
for (auto beg=vecvalue.begin(),end = vecvalue.end();beg != end;++beg){
//改变beg的值会报错
cout << *beg << endl;
}
//8.1 类的构造函数
C++中,存在先写函数声明,另写函数定义,参数的默认值只能在函数声明的时候给
//8.2 构造函数可以存在多个,但是参数的属性或者参数一定要有区别
//8.3 构造函数定义前使用explict关键字, 构造函数只能显式类型转换。
// 防止在单参数的构造函数时,发生对传入的不合规参数进行隐形类型转换
//8.4 构造函数初始化列表,用来构造函数后,快捷定义成员变量
public:
int selfVar;
MyClass::MyClass(int myVar)
:selfVar(myVar)//构造函数初始化,提倡所有成员变量使用这用方法
{
//selfVar = myVar;//等同赋值操作
}
//8.5 在类里的函数后面使用const关键字,表示const函数不会修改类中的成员变量
const成员变量,只能调用const函数,确保不会被修改
//8.6 可以使用multible修饰成员,可以调用const/非const函数
//9 static修饰符,编译时生效一次,限制某个全局变量只能在当前文件生效,声明后使用则定义时不用使用,默认给0
//10.拷贝构造函数
public:
Time(Time &tempTime,int a =50)//拷贝构造函数,在类对象某些形式拷贝的时候自动调用
//11重载赋值运算符时,对传入的参数使用const类型,可以防止被拷贝值的被修改
//12 析构函数,在销毁时调用,使用~加类名作为名称,不可被重载
//13.1使用vitual修饰符,在父类/基类中修饰函数,为虚函数,则父类指针使用子类初始化时,在调用子类的时候可以调用虚函数
Human *human = new Men;
human->eat;//调用子类Men中的eat函数
human->Human::eat;//调用父类中,的eat函数(修饰为vitual的虚函数)
//13.2父类中声明为虚函数的,子类中的同名函数也要为同参数且为虚函数,不一样则会覆盖父类中同名函数,在C++11中使用overwrite作为结尾,表示覆盖父类中的同名虚函数。
//13.3如果在父类的函数声明中使用final关键字的虚函数,则该函数无法被重写
//13.4虚函数声明后,必须被定义,在执行中才知道被绑定的位置
//13.5虚函数的多态性,指执行时会找到虚函数的列表,对应的函数入口,为虚函数运行时的多(状)态性
//13.6纯虚函数,在父类中没有定义自己的函数实现,但是子类中都要实现这个方法,这个类也成为抽象类,不能生成对象,仅用来管理子类对象
virtual vitualFun() = 0;
//还可以
//基类的指针New子类的对象,在delete时不会不会调用子类的析构函数,导致内存泄漏,所以一般定义析构函数为虚函数,使用其多态性。
//13.7 基类有了虚函数,就会为该类生成到虚函数表。则该类的基类指针,则可以用dynamic_cast(用于转化父类指针为派生类指针)和typeid(返回指针或者指针对象的实际类型)实现RRTI功能
//14 把函数设置为一个类的友元函数,则可以访问类中的所有对象,使用friend修饰符。也可以定义友元类,友元的定义是单向,不可传递继承的
//15 左值和右值,不能在左边被赋值的为右值,左值引用把右侧的值绑定到左侧,右值引用把左侧绑定到右侧(比如地址引用)
网友评论