c++笔记-c++primer
1.基础汇总-持续更新
int main(void);// 等价于 int main(),接口函数头
&;//即可以表示地址运算符,也可以表示按位AND运算
*;//即可以乘法,也可以表示对指针接触引用
内敛函数 inline
inline 不应该出现在函数的声明中,C++ 语言支持函数内联,其目的是为了提高函数的执行效率(速度),最好利用inline替代宏定义(#define ,起源于c语言),在C程序中,可以用宏代码提高执行效率。宏代码本身不是函数,但使用起来像函数。使用宏代码最大的缺点是容易出错,预处理器在复制宏代码时常常产生意想不到的边际效应。对于C++ 而言,使用宏代码将无法操作类的私有数据成员。
volatile 关键字本身的意思是它所修饰的变量是不稳定的,在运行过程中有可能会被改变成新的值。
const 是不可变得意思 和volatile 是会改变的意思,那如果哪两个关键字同时修饰一个变量是什么意思?如:const volatile int a=1;
首先 const 是指A程序不能对a 变量的值进行修改,但是B程序可能会对a的值修改,恰好A程序有在####检测a这个变量,那这时候就需要这两个关键字同时去修饰变量。
定义方式
void fun(int x);
inline void fun(int x)
{
}
class A
{
public:
void fun(int x);
}
// 定义文件
inline void A::fun(int x)
{
}
2. 类 构造函数 析构函数
类与结构体之间唯一的区别是结构体的默认访问方式是public,类的默认访问方式为private
class Sales_item
{
public:
Sales_item();
virtual ~Sales_item();
//string SBN;
//int prince;
//protected:
//private:
};
//构造函数
Sales_item::Sales_item()
{
}
//析构函数
Sales_item::~Sales_item()
{
cout<<"析构函数"<<endl;
}
#endif
int main()
{
Sales_item item;//输出 4 \n 析构函数 默认调用析构函数释放栈中内存
//Sales_item item = Sales_item();//输出 4 析构函数 默认调用析构函数释放栈中内存
//Sales_item *item = new Sales_item;//输出 4 析构函数 定义了指针后要记得删除才会调用析构函数,即可释放堆中内存
//item.price = 8;
cout<<sizeof(item)<<endl;
//cout<<sizeof(item.price)<<endl;
//cout<<item.prince<<endl;
//delete item;//定义了指针后要记得删除才会调用析构函数
return true;
}
构造函数是特殊的类成员函数,在创建类对象时被调用。构造函数的名称和类名相同,但是通过函数重载,可以创建多个同名的构造函数,每个函数参数列表不同,根据不同的参数列表调用,构造函数不声明类型。
3. this指针
一般来说 this指针指向用来调用成员函数的对象(this作为隐藏参数传递给方法),在例子中, item.topPrice(item1),将this设置为item对象的地址,注意每个成员函数(包括构造函数和析构函数)都有一个this指针,该指针指向调用对象。如果方法需要调用整个调用对象,则可以使用表达式*this,this是对象的地址,*this才是对象本身,另外,在函数的括号后面使用const限定符将this限定位const,使得不能使用this来修改对象的值
class Sales_item
{
public:
Sales_item(const string info);
Sales_item(const string info1,const string info2);
virtual ~Sales_item();
const Sales_item & topPrice(const Sales_item & s) const;
//string SBN;
//int prince;
//protected:
private:
double price;
};
//构造函数
Sales_item::Sales_item(const string info)
{
price = 6.5;
cout<<info<<endl;
}
Sales_item::Sales_item(const string info1,const string info2)
{
price = 8.5;
cout<<info1<<endl;
cout<<info2<<endl;
}
//析构函数
Sales_item::~Sales_item()
{
cout<<" 析构函数"<<endl;
}
const Sales_item & Sales_item::topPrice(const Sales_item & s) const
{
if (s.price > price)
{
cout<<"aaaaaaaaaa"<<endl;
return s;
}else{
cout<<"eeeeeeeee"<<endl;
return *this;
}
}
int main()
{
Sales_item item("test","test1");
//Sales_item item = Sales_item();
//Sales_item *item = new Sales_item;
Sales_item item1("test");
item.topPrice(item1);
//cout<<sizeof(item)<<endl;
//cout<<sizeof(item.price)<<endl;
//cout<<item.prince<<endl;
//delete item;
return true;
}
//输出
/*
test
test1
test
eeeeeeeee
析构函数
析构函数
*/