程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [C/C++學院]0813-C與CPP不同以及命名空間簡介/函數重載與函數默認參數/泛型auto/Newdelete

[C/C++學院]0813-C與CPP不同以及命名空間簡介/函數重載與函數默認參數/泛型auto/Newdelete

編輯:C++入門知識

[C/C++學院]0813-C與CPP不同以及命名空間簡介/函數重載與函數默認參數/泛型auto/Newdelete


 

C與CPP不同以及命名空間簡介

 

命名空間在軟件設計中的作用就是為了實現迭代式開發。

命名空間的別名

#include 

namespace runrunrunrun
{

	int a(10);
	char *str(gogogo);
	namespace run   //命名空間的嵌套
	{
		int a(9);
	}
}
namespace runrunrunrun  //命名空間的拓展
{
	int  y(5);
	//int  a(15);重定義錯誤
}
namespace r = runrunrunrun;//給命名空間起一個別名


void main132()
{
	std::cout << r::run::a << std::endl;//命名空間可以嵌套
	std::cout << r::y << std::endl;
	std::cout << r::a << std::endl;
}

//using namespace r;
void main11()
{
	//std::cout << r::a <

命名空間軟件開發注意事項

#include 

namespace runmove
{
	int  y(5);
	int(*padd)(int, int);//函數指針接口
//private: 命名空間是透明的
	int  y1(5);
	class myclass
	{
	public://類默認是私有,實現封裝
		int a;
	};
}

int add(int a, int b)
{

	return a + b;
}
int addp(int a, int b)
{
	std::cout << a << b;
	return a + b;
}
struct MyStruct
{
	int b;//結構體默認是透明的
private:
	int a;//是私有
};

void main1123()
{
	//namespace所有數據,函數,類,對象都是共有
	MyStruct struct1;//結構體內部默認公有
	struct1.b;


}

Using作用域

#include
#include
namespace mydata
{
	int a(6);
}
namespace yourdata
{
	int a(8);
}
using namespace mydata;//using必須在命名空間的後面,作用域
using namespace yourdata;
//using如果變量重名,會出現不明確錯誤,加上命名空間修飾符
void go()
{
	//命名空間如果在塊語句內容,作用域是定義開始到塊語句結束
	std::cout << mydata::a << std::endl;
}


//using namespace mydata;//作用域為從代碼開始到結束
void main()
{
	//std::cout << mydata::a << std::endl;
	std::cout <

函數重載與函數默認參數

函數重載原理

 

#include
#include

//參數的個數,參數的類型不同,順序不同,與返回值無關
void go(int a)
{
	std::cout << a;
}

void go(double a)
{
	std::cout << a;
}

void go(double a,int b )
{
	std::cout << a << b;
}

void go(int  a, double b)
{
	std::cout << a << b;
}

//int go(double a)
//{
//
//
//}


//void go(int a,int b)
//{
//
//}


void main()
{
	void(*pgo1)(int a)=go;
	void(*pgo2)(double a)=go;
	void(*pgo3)(double a, int b)=go;
	void(*pgo4)(int  a, double b)=go;
	printf(%p
,pgo1);
	printf(%p
, pgo2);
	printf(%p
, pgo3);
	printf(%p
, pgo4);

	getchar();
}

 

默認參數

#include
#include
#include

//默認參數必須放在右邊,因為參數的入棧順序是從右至左
//默認參數中間不允許出現不默認的

void print(int c,int a = 1, int d=2, int b = 3)
{
	std::cout << a<

泛型auto

#include
#include
//自動變量,自動獲取類型,輸出,泛型
//自動變量,可以實現自動循環一維數組
//自動循環的時候,對應的必須是常量

void main1()
{
	auto num = 10.9;//自動變量,自動匹配類型
	auto numA = 10/3.0;
	std::cout << num <<      << numA << std::endl;
	system(pause);
}

void main()
{
	//int num[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	double num[2][5] = { 1.0, 2.0, 3.0, 4.5, 5, 6, 7, 8, 9, 10 };
	//num數組名是一個指針常量
	//auto 自動循環 begin  endl;,必須是一個數組的常量
	//
	for (auto data : num)//泛型C++語法,循環一維數組,常量
	{
		std::cout << data<

Newdelete

對象數組

#include 
#include

class tansheng1
{
	int *p;
	int length;
public:
	tansheng1()//構建的時候初始化
	{
		std::cout << 譚勝被創建1<

New只能分配線程的內存

#include
#include
#include

void main1()
{
	int num=10;//棧上
	int *p = new int;//堆上
	*p = 5;
	std::cout << *p <<    << p << std::endl;
	delete p;
//	delete p;//只能釋放一次
	std::cout << p << std::endl;

	system(pause);
}

void  main2()
{
	//int num[10];
	int *p = new int[10];
	//int i = 0;
	std::cout << p << std::endl;

	for (int i = 0; i < 10; i++)
	{
		p[i] = i;
		std::cout << p[i] << std::endl;
	}
	delete []p;//刪除數組的空間
	std::cout << p << std::endl;

	system(pause);
}

void main3()
{
	int *p = new int[80];
	int(*px)[10] = (int(*)[10]) p;
	//int(*px)[10] = new int[80];new只能分配線性

	int data = 0;
	for (int i = 0; i < 8; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			px[i][j] = data++;
			std::cout <<   << px[i][j];
		}
		std::cout<

Newdelete重載

#include 
#include

class tansheng
{
public:
	static int jishuqi;//靜態
	int *p;
	int length;
public:
	tansheng()//構建的時候初始化
	{
		std::cout << 譚勝被創建2 << std::endl;
	}
	~tansheng()//刪除的時候釋放內存
	{
		std::cout << 譚勝被銷毀2 << std::endl;
	}
	
	static void * operator new(size_t size)
	{
		jishuqi += 1;
		std::cout << 對象被創建2 << std::endl;
		tansheng *ptemp = ::new tansheng;//劫持
		return ptemp;
	}

	static void  operator delete(void *p)
	{
		jishuqi -= 1;
		std::cout << 對象被銷毀2 << std::endl;
		::delete p;//::全局
	}
};

int tansheng::jishuqi = 0;
//類的內部的new沒有完成分配內存的動作
//通往全局的new中間做了一個劫持


//空類占一個字節,表示自己存在
//類的對象,數據是獨立,代碼是共享的
//沒有分配內存,構造函數無意義
class MyClass
{
	int num;
public:
	MyClass();
	~MyClass();

private:

};

MyClass::MyClass()
{
}

MyClass::~MyClass()
{
}

void main()
{

	tansheng * p1 = new tansheng;
	tansheng * p2 = new tansheng;
	tansheng * p3 = new tansheng;
	tansheng * p4 = new tansheng;
	std::cout << p1 << p2 << std::endl;
	delete p1;
	delete p2;
	std::cout << tansheng::jishuqi << std::endl;
	std::cout <

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved