C++: 笔记
1,cout和endl
cout:输出,记忆的时候C out,总是会记忆成count
endl:end line 结束此行,并刷新缓冲区
cout<<"helloworld"<<endl;
2,#if #endif
#if 表达式 // 如果表达式为真 程序段1
#else // 否则 程序段2
#endif
可以直接通过宏定义来改变部分代码是否需要执行
#include“stdio.h”
#define TEST_2 1
int main()
{
int a=11;
#if TEST_2
int *b=&a;
*b = 10;
#endif
a++;
}
3,类Class和结构体Struct的区别
类,在同一个解决方案中(一个项目中),类不能在多个cpp中重复定义。
做练习时,声明了两个相同的类名,频繁报错,找了好久才发现是类名重复了。
类Class:类中的成员默认都是 private 属性的,继承默认是 private 继承,可以使用模板,
结构体Struct:结构体中的成员默认都是 public 属性的,继承默认是 public,不可以使用模板,
4,析构函数和构造函数
两者的区别在于调用时机的差异:
析构函数:是在对象销毁的时候自动调用,可以不显示声明,
构造函数:是在对象创建的时候自动调用
#include <iostream>
#include <string>
using namespace std;
/// <summary>
/// 结构体中的成员默认都是 public 属性的,继承默认是 public,不可以使用模板,
/// </summary>
struct Teacher52
{
string name;
int gender;
int age;
void IsGood()
{
cout << "Isgood" << endl;
}
};
/// <summary>
/// 类中的成员默认都是 private 属性的,继承默认是 private 继承,可以使用模板
/// </summary>
class Student52
{
//*************公共的,能继承到*************
public :
//*************构造函数在对象创建的时候自动调用*************
Student52()
{
//_money = 1222;
//_ownerCar = 1;
cout << "无参构造函数创建时使用" << endl;
}
Student52(int money,bool ownerCar,int gold)
{
_money = money;
_ownerCar = ownerCar;
_gold = gold;
cout << "含参构造函数创建时使用" << endl;
}
Student52(const Student52 & st)
{
_money = st._money+12;
_gold = st._gold+10;
cout << "money" << _money << endl;
cout << "gold" << _gold << endl;
cout << "拷贝构造函数创建时使用" << endl;
}
//*************析构函数在对象销毁的时候自动调用*************
~Student52()
{
cout << "类析构函数对象销毁时使用" << endl;
}
void GetGold()
{
cout << "gold" << _gold << endl;
}
int age;
int gender;
string name;
//*************私有的,继承不到*************
private:
int _money;
//*************保护的,能继承到*************
protected:
bool _ownerCar;
int _gold;
};
void test52()
{
//第一种,类实现创建对象使用new和delete搭配使用,放在堆上(由new新建的内存,存放在堆里,相当于你新建了一个房子,拆迁由你定,不时也会有政府强制给你拆迁)
Student52* st = new Student52();
delete(st);
//第二种,类实现创建对象直接申明(形式和定义普通变量类似),*******建议使用这种********,这是直接在栈上创建
Student52 st2;
//Student52 st2();//这种写法程序会报错的,程序会被编译器认为是一个函数,返回Student52对象。
Student52 st3(1000, true,90);
//第三种,类实现创建对象
Student52 st4 = Student52();
Student52 st5 = Student52(1000, true,90);
Student52 st6(st3);
st6.GetGold();
st3.GetGold();
}
int main()
{
cout << "开始测试" << endl;
test52();
system("pause");
return 0;
}
5,类前向声明(只是声明但是没有具体内容)
class student;
class teacher
{
//student st;//这是错误的,因为student类声明不完整,没有实现
student *st1;//这个是ok的,因为这里经过前向引用声明,可以声明student类的对象指针
}
class student
{
teacher te;
}
int main()
{
cout << "开始测试" << endl;
system("pause");
return 0;
}
6,int A(10)和int A=10
这两个是同一个概念,只不过是构造函数使用的方式不一样。
int,string,这些都可以想象成是一个class类型,初始化的时候,就相当于在调用构造函数
7,#ifndef #define #endif
用ifnde xxx #define xxx#endif或者其他方式避免头文件重复包含,只有好处没有坏处。编程中最好加上,避免后期头文件重复调用导致编译报错
下面给一个#ifndef/#define/#endif的格式:
#ifndef A_H意思是"if not define a.h" 如果不存在a.h
接着的语句应该#define A_H 就引入a.h
最后一句应该写#endif 否则不需要引入
#ifndef STUDENT_H
#define STUDENT_H
class teacher
{
}
#endif
8,#pragma region #pragma endregion
#pragma region是C++中特有的预处理指令。它可以让你折叠特定的代码块,从而使界面更加清洁,便于编辑其他代码。折叠后的代码块不会影响编译。你也可以随时展开代码块以进行编辑等操作。
格式:
#pragma region 变量
int phyRFMode;
int phyId;
int txMode;
int channel;
int rateBitIndex0;
double txPower0;
int rateBw;
int wlanMode;
int tpcm;
int wifiStandard;
#pragma endregion 声明变量