C++小记(一)

Namespace 命名空间

     作用:避免重复定义,解决合作开发中命名冲突的问题

     例:

#include <iostream>

using namespace std;

namespace A
{
	int a = 1;

	void print()
	{
		cout << "namespace A" << endl;
	}
}

namespace B
{
	int a = 2;
	void print()
	{
		cout << "namespace B" << endl;
	}
}

namespace C  //命名空间的嵌套
{
	namespace D
	{
		int a = 3;
		void print()
		{
			cout << "namespace C::D" << endl;
		}
	}
	
}

int main()
{
	/*using namespace A;  // 命名空间的使用,此优先级高于后面的使用方法
	//cout << "a = " << a << endl;

	//cout << "a = " << B::a << endl;

	//using B::a;          //命名空间的使用2,此优先级略低
	//cout << "a = " << a << endl;
	//print();
	
	//cout << "a = " << C::D::a << endl;
	C::D::print();
    return 0;
}

一些C与C++的区别

  1.       register变量,对register变量取地址,C编译时不通过,C++编译时通过,但是该变量转换为普通变量
  2.       C++中不允许重复定义全局变量,C允许
  3.       C中三目运算符的结果不能作为赋值的左值,C++可以

插曲1:

      const与#define的区别

      const在函数内部有效,局部变量;#define从这一行代码开始往下都有效

引用

          引用一定要初始化,但是不能用常量初始化引用

       

#include "iostream"

using namespace std;

void swap(int &x, int &y)
{
	int temp = x;
	x = y;
	y = temp;
}

struct Test
{
	char &x;   //引用其实就是常指针
	char &y;
};

void init(char *&str)
{
	str = (char *)malloc(100);
}

int main()
{
	/*
	int a = 1 , c = 3;
	int &b = a; //定义引用,一定要初始化,但不能用常量初始化
	cout << "b = " << b << endl;
	swap(a, c);
	cout << "a = " << a << "   c = " << c << endl;
	*/

	
    int a = 1;
	char b = 'a';
	int &c = a;
	char &d = b;

	cout << sizeof(c) << endl;    //结果为4
	cout << sizeof(d) << endl;    //结果为1
	cout << sizeof(Test) << endl; //结构体中只做声明,引用相当于常指针,结果为8
    

	char *ptr = NULL;
	
	init(ptr);   //引用指针
	strcpy(ptr, "hello");
	
	cin.get();
	return 0;
}

默认参数

           默认参数一旦使用,后续形参都必须使用默认参数

          

int add(a, b = 1, c)     //错误写法
int add(a, b = 1, c = 2)  //正确写法

占位参数

          占位参数主要是为了日后代码修改方便,提升代码的可重用性,为后续需要添加的参数预留位置

扫描二维码关注公众号,回复: 2652310 查看本文章
int add(int x, int y, int , int )// 后两位即为占位参数,传参时需传递4个参数

占位参数常和默认参数结合使用,如此可减少传参的数量,需要几个传几个,定义遵循默认参数的原则

int add(int x, int y, int = 0, int =0)    //后两位占位默认参数

小提重载

          构成函数重载的条件:

  1. 参数的个数不同
  2. 参数的类型不同
  3. 参数的顺序不同

返回值的不同不是构成函数重载的条件

猜你喜欢

转载自blog.csdn.net/userkiller/article/details/81109854