C++: 笔记

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 studentclass 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 声明变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值