首页 - 新闻 - vs2010无法识别ture_VS2010 C++学习笔记(一)引用函数参数默认值函数重载内联...

vs2010无法识别ture_VS2010 C++学习笔记(一)引用函数参数默认值函数重载内联...

2023-10-09 18:54

Web Service和网页的相似之处在上一章提到过,这里总结一下:

1。由公共语言运行时完全实现,包括面向对象的架构、所有基类以及缓存、状态和数据访问等功能

2。几乎相同的文件和代码结构

3。所有源代码文件都是纯文本

4。 vs完全支持,可以使用vs进行非常方便的编辑和调试

5。使用基于纯文本的配置文件和VS的网站管理工具进行全局或应用程序级配置。

Web Service没有接口,只有方法,有些东西可以从客户端远程调用。 Web服务文件的后缀是asmx。

首次运行Web Service应用时,如果手动编译Web Service并将其放置在虚拟目录的bin目录下,那么代码隐藏对于内联编码有性能优势,因为asmx文件位于Web Service在运行时会被编译成一个类。 www.gsm-guard.net 2.0默认情况下不具备这个优势,因为www.gsm-guard.net 2.0将源代码放在App_Code目录中,并在第一次使用时进行编译。

下面是一个例子(库存追踪,没有使用数据库,只是为了演示,所以使用了二维数组)

此 Web 服务提供两种方法:

GetName:参数为StcokSymbol对象,返回内容为股票名称的字符串

GetPrice:参数是StcokSymbol对象,返回代表当前股票价格的数字

我用的是vs2010,

首先新建一个项目(WebSite也可以),注意选择.NET Framework 3.5,默认4没有Web Service选项。选择www.gsm-guard.net Web Service Application,命名为StockWebService,如图

我们可以看到vs自动为我们生成了一些代码:

///

/// Service1 的摘要描述

///

[WebService(命名空间 = "http://www.gsm-guard.net/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.ComponentModel.ToolboxItem(false)]

// 要允许使用 www.gsm-guard.net AJAX 从脚本调用此 Web 服务,请取消注释以下行。

// [System.Web.Script.Services.ScriptService]

公共类 Service1 :System.Web.Services.WebService

{

[WebMethod]

公共字符串 HelloWorld()

{

返回“Hello World”;

}

}

在 Service 类中,有一个名为 HelloWorld 的模板方法,它将返回一个字符串。该方法用 WebMethod 属性修饰,表明该方法可供 Web Service 用户使用。 WebMethod 功能将在稍后解释。

按F5运行程序,可以看到如图

添加以下方法

[WebMethod]

public double GetPrice(string stockSymbol)

{

for (int i = 0; i

{

if (string.Compare(stockSymbol,stocks[i, 0], true) == 0)

return Convert.ToDouble(stocks[i, 2]);

}

返回0;

}

[WebMethod]

公共字符串 GetName(string stockSymbol)

{

for (int i = 0; i

{

if (string.Compare(stockSymbol,stocks[i, 0], true) == 0)

返回股票[i, 1];

}

返回“未找到符号。”;

}

重新运行项目,发现多了两个方法调用的入口。

Web 服务命令

普通.aspx文件使用Page指令作为第一行代码,而Web Service有一条WebService指令(在vs中无法直接看到,可以找到Service1.asmx文件,右键编辑):

<%@ WebService Language="C#" CodeBehind="Service1.asmx.cs" class="StockWebService.Service1" %>

语言:指定 Web 服务中使用的语言,非必需

类:指定 Web 服务的类名称,必填

CodeBehind:如果该类没有包含在Web Service文件的代码中,并且该类没有被手动编译并放置在bin子目录中,则WebService指令的CodeBehind属性用于指定该类的名称实现WebService类的源代码文件。 。

调试:如果设置为 true,则将在启用调试的情况下编译 Web 服务。默认为 false

??

继承自WebService类

虽然它是可选的,但它有几个优点。主要优点是它可以访问 www.gsm-guard.net 中的几个常见对象:

Application对象和Session对象(状态管理)、User对象(用于验证Web服务器调用者的身份)、Context对象(可以访问HttpContext类中调用者请求的所有特定HTTP信息)

当然,继承WebService类也是必要的,大概是为了克服.NET Framework的限制。

通过HttpContext控制应用程序状态

Web Service可以通过HttpContext控制Application对象(也可以访问所有www.gsm-guard.net资源)

示例:在Service1.asmx.cs中添加以下方法:

///

/// 设置股票交换

///

///

[WebMethod]

public void SetStockExchange(字符串交换)

{

应用[“交换”] = 交换;

}

[WebMethod]

公共字符串 GetStockExchange()

{

return Application["exchange"].ToString();

}

WebServiceBinding 功能

Web 服务描述语言 (WSDL) 定义的绑定可以用作 .NET 类访问 WebService 的接口。也就是说,绑定定义了一系列操作。 WebService 类具有默认绑定,其中包含该类的所有 Web 方法。此类与非默认绑定没有关联。 WebServiceBinding 属性用于标识非默认绑定。 WebService 类可以具有多个 WebServiceBinding 属性,每个属性都可以指定不同的绑定。如果省略 Name 属性,则该属性将指定默认绑定。

属性类型读写描述 ConformsToWsiProfiles╳╳WS-1 标准,绑定需要遵守 EmitConformanceClaimsBoolean╳╳如果为 true,当 WSDL 描述时,绑定会发出符合性声明 LocationString╳╳定义绑定的位置,默认value 当前 Web 服务 URL 的绑定名称 NamespaceString╳╳ NameString╳╳与绑定关联的命名空间

WebMethod 功能

网络服务是

Web 服务由 WebService 类定义。对于WebService类来说,没有必要向Web Service用户提供所有方法。需要提供的方法请:

1。宣布公开

2。在方法声明前设置WebMethod属性(即添加【Web Service】)

WebMethod 包含一些用于设置 Web 方法行为的属性。语法:[WebMethod(PropertyName=value)],以下是部分属性的说明

BufferResponse:默认情况下,www.gsm-guard.net 在将整个响应从服务器发送到客户端之前缓存整个响应。在大多数情况下,这是最好的做法。但是,如果响应很长,则需要将其设置为 false 以禁用缓存。如果设置为 false,响应将以 16kb 块的形式返回给客户端。默认值为 true

CacheDuration:和网页一样,Web Service也可以缓存返回给客户端的结果(有点:如果客户端发出的请求与另一个客户端发出的请求一模一样,那么服务器就会返回响应放在缓存中,可以提高性能)。 CacheDuration 定义第一个请求后多少秒将发送缓存页面以响应后续请求。一旦缓存过期,就会向请求发送新页面。默认值为 0,这会禁用结果缓存。如果web'方法返回的数据没有变化(例如:从每小时更新一次的数据库中检索数据的查询),那么可以将结果缓存设置为合适的时间,例如1800(30分钟) )。一方面,如果返回的数据是动态的,则需要将缓存持续时间设置得更短或完全禁用。如果Web Service没有相对有限的参数范围,则不适合使用缓冲。

Description:web方法的说明,字符串类型

EnableSession:默认为 false。如果设置为 true,Web 方法将启用会话状态。如果设置为 true 并且 Web Service 继承自 WebService 类,则会话可以使用 WebService.Session。允许会话状态会增加应用程序的额外开销。

MessageName:在C#类中,方法可以同名(重载),Web Service禁止使用重载。 WebMethod 属性的 MessageName 属性可以消除由多个相同名称引起的无法识别的问题。它允许为每个方法重载使用唯一的别名。当在 SOAP 消息中引用重载方法时,SOAP 消息将使用 MessageName 而不是方法的名称。

TransactionOption 属性:www.gsm-guard.net Web 方法可以使用事务,但仅限于在 Web 方法中初始化事件时。 TransactionOption 属性用于设置 Web 方法是否启动事务。但是,由于Web方法事务必须是根对象,因此只有两种不同的行为,启用新对象(Required、RequiresNew)或不启动它(Disabled、NotSupported、Supported)。如果在Web Service中启用事务,则需要: 1. 添加System.EnterpriseServices.dll引用; 2.添加命名空间(使用System.EnterpriseServices;); 3. 将 TransactionOption 属性添加到 WebMethod 属性并将其设置为Required(或RequiresNew)

转载于:https://www.gsm-guard.net/eart/archive/2011/05/30/2063855.html

? www.gsm-guard.net 上的 C++ 视频。 ?视频链接?链接,讲得还不错,有《Visual C++2008入门经典(中文高清版)》,有2010年的版本。

?学习并做笔记。

1。引用

2.函数参数的默认值?

3。函数重载

4。内联函数 inline

/**************************************************** **

/*bool类型命名空间输入输出

/*要求:

/* 使用函数查找整数数组中的最大值或最小值

/**************************************************** ***/

#包括

#include //系统头文件("pause")

使用命名空间 std;

int getMaxOrMin(int *arr, int arr_len, bool isMax);

int main(void)

{

cout<<“嗨”<

int arr1[5] = {2,5,6,4,9};

bool isMAx = false;

cin >> isMAx;

cout << getMaxOrMin(arr1, 5, isMAx) << endl;

系统(“暂停”);

返回0;

}

int getMaxOrMin(int *arr, int arr_len, bool isMax)

{

int temp = arr[0];

for (int i = 1; i < arr_len; i++)

{

if (isMax)

{

if (temp < arr[i])//获取最大值

{

temp = arr[i];

}

}

其他

{

if (temp > arr[i])//获取分钟

{

temp = arr[i];

}

}

}

返回温度;

}

1 为Ture,求Max,值为9

0 为False,求Min,值为2

1。引用

引用是变量的别名。

引用在使用前必须初始化。

int a = 5;

int &b = a;

指针类型引用?*&指针引用 = 指针;

引用的好处,左边是C语言方法,右边是C++引用方法。交换两个数字的值。

#包括

#包括

使用命名空间 std;

int main(void)

{

//int a = 10;

int &b = NULL; //引用,无实体。将会出现引用错误。

系统(“暂停”);

返回0;

}

/*

错误 1 ​​错误 C2440:“初始化”:无法从“int”转换为“int &”

e:\linbo\visual studio 2010\projects\test\test\test.cpp 9 1 测试

*/

参考,无实体。会出现引用错误。

c++中引用和指针有什么区别? ? ★ 相似点: ? 1、两者都是地址的概念; ? ?指针指向一块内存,其内容就是所指向内存的地址;引用是某一块内存的地址。别名。 ? ? ★ 差异: ? ? 1、指针是一个实体,而引用只是一个别名; ? ? 2、使用引用时不需要解引用(*),而指针需要解引用; ? ? 3. 引用只有在定义初始化一次后才能使用,此后不可变;指针是可变的;参考是“从一到最后”^_^? ? 4、引用没有const,指针有const,并且const指针是不可变的; ? 5.引用不能为空,指针可以为空; ? ? 6、“sizeof引用”获取指向的变量(对象)的大小,而“sizeof指针”获取​​指针本身的大小(指向的变量或对象的地址); ? ? 7.指针和引用的自增(++)操作的含义不同;

参考的一些规则如下: ? ? (1)引用在创建时必须初始化(指针可以随时初始化)。 ? ? (2) 不能有NULL引用,并且该引用必须关联合法的存储单元(指针可以为NULL)。 ? ? (3)引用一旦初始化,引用的关系就不能改变(指针可以随时改变它所指向的对象)。

2。函数参数默认值

有默认值的参数必须位于参数列表的右端。

fun (20) i = 20, j, k 为默认参数

fun (20, 30) 为:i=20, j=30, k 为默认值

乐趣 (20,30,40) 是:i=20, j=30, k=40

**************************************************** ****************************************************** *********************************************

3。函数重载

同一函数的识别取决于参数类型、参数个数、参数顺序。

**************************************************** ****************************************************** ********************************************************* ** ****************

4。内联函数 inline

通常步骤 3 不会花很长时间,而步骤 1 和 2 则需要更长的时间。

一个内联函数,如下。它实际上扩展到下图。

上图中的功能其实是扩展了的。

fun (20) i = 20, j, k 为默认参数

fun (20, 30) 为:i=20, j=30, k 为默认值

乐趣 (20,30,40) 是:i=20, j=30, k=40

**************************************************** **************************

函数参数重载

#包括

#包括

使用命名空间 std;

void fun(int i = 15, int j = 30, int k = 20);

int main(void)

{

有趣(10);

乐趣(12,18);

乐趣(55,26,90);

系统(“暂停”);

返回0;

}

void fun(int i, int j, int k)

{

cout << "i:" << i << " j:" << j << " k:" << k << endl;

}

**************************************************** *************************

函数重载

#包括

#包括

使用命名空间 std;

void fun(int i = 15, int j = 30, int k = 20);

避免乐趣(双i,双j);

int main(void)

{

有趣(1.1,2.3); //void fun(double i , double j);

fun(12,18);//void fun(int i = 15, int j = 30, int k = 20);

系统(“暂停”);

返回0;

}

void fun(int i, int j, int k)

{

cout << "i:" << i << " j:" << j << " k:" << k << endl;

}

无乐趣(双i,双j)

{

cout << "i:" << i << "j:" << j << endl;

}

**************************************************** **************************

内联

#包括

#包括

使用命名空间 std;

内联 void fun(int i = 15, int j = 30, int k = 20);

内联 void fun(双 i , 双 j);

int main(void)

{

有趣(1.1,2.3); //void fun(double i , double j);

fun(12,18);//void fun(int i = 15, int j = 30, int k = 20);

系统(“暂停”);

返回0;

}

void fun(int i, int j, int k)

{

cout << "i:" << i << " j:" << j << " k:" << k << endl;

}

无乐趣(双i,双j)

{

cout << "i:" << i << "j:" << j << endl;

}

**************************************************** **********************

单元加固

使用函数的重载完成返回顶部的方法。

现在有一个数组,定义一个方法getMax(),利用函数的重载来实现:

1。随意从数组中取出两个元素,传递给方法getMax()。可以返回较大的元素。

2。将整个数组传递给方法 getMax() 以返回数组中最大的元素。

/**************************************************** **************/

/* 单位合并

使用函数重载来完成返回最大值的方法。

现在有一个数组,定义一个方法getMax(),利用函数的重载来实现:

1。随意从数组中取出两个元素,传递给方法getMax()。可以返回较大的元素。

2。将整个数组传递给方法 getMax() 以返回数组中最大的元素。

*/

/**************************************************** **************/

#包括

#包括

使用命名空间 std;

int getMax(int ​​*arr, int arr_len);

int getMax(int a, int b);

int main(void)

{

int arr[3] = { 5, 7, 3};

cout << getMax(arr, 3) << endl; //int getMax(int *arr, int arr_len);

cout << getMax(8, 7) << endl;//int getMax(int a, int b);

//system("暂停");

}

int getMax(int ​​*arr, int arr_len)

{

int max_temp = arr[0];

for (int i = 1; i < arr_len; i++)

{

if ( max_temp < arr[i])

{

max_temp = arr[i];

}

}

返回 max_temp;

}

int getMax(int a, int b)

{

返回 a > b ?甲:乙; //如果a>b为true,则执行a,如果为false,则执行b

}

*********************************************

将会

将_itoa改为_itoa_s即可解决问题