非引用形参通过用实参的副本初始化形参,修改形参的值,不会影响实参的值,然而复制实参并不是在所有的情况下都适合,不适宜复制实参的情况包括:
l 当需要在函数中修改实参的值时
l 当需要以大型对象作为实参传递时。对实际的应用而言,复制对象所付出的时间和存储空间代价往往过大
l 当没有办法实现实参的复制时。
对第一种情况很常见,而第二种情况,则是为了性能必须要考虑进去的,比如下面的一段程序,就把形参用成了引用类型,是因为我这个程序是要把ifstream的内容复制到vector中,然而ifstream读入的是一个很大的文件,可能有10MB那么大,当然最后生成的vector也会有10MB的大小,如果采用传统的用拷贝参数传递ifstream,然后用一个临时的vector保存内容,最后再返回vector的副本时,可见浪费了很多的时间,和空间。
当然本程序不想修改实参ifstream的值,这时候,把形参声明称const的类型即可,它是可以接受非const的实参的
//函数作用,将ifstream的内容放到vector里面,其中hasOtherValue表示是否一行中,除了原词,还有词频和词性
void ifsreamToVector(ifstream & fin,vector
&v,bool hasOtherValue=true){
v.clear();
string str;//存放词语if(hasOtherValue){
//说明一行中,除了原词,还有词频和词性
int itmp;//存放词频
string stmp;//存放词性
while(fin>>str>>itmp>>stmp){
v.push_back(str);
}
} else {
while(fin>>str){
v.push_back(str);
}
}
}
这些问题不是在做网站时使用在哪,而是一些的基本概念。。。
值类型和引用类型的区别就是在赋值和作为参数传递时。。。
赋值时,值类型是赋值一个全新的变量出来(即复制),而引用类型则只是将地址赋值给新的对象。
参数传递时,值类型是把参数值进行传递,而引用类型则是把地址传过去作为参数。
下面的例子。。。
//值类型赋值。
public void valuttype()
{
int a=10;
int b=a;
b=20;
Console.WriteLine("a={0},b={1}",a,b);
}
可以看到输出结果为a=10,b=20。
//类类型赋值。
public class Test
{
int a;
public int A
{
get
{
return a;
}
set
{
a=value;
}
}
}public void classtype()
{
Test t=new Test();
t.A=10;
Test t1=t;
t1.A=20;
Console.WriteLine("t.A={0},t1.A={1}",t.A,t1.A);
}
输出结果是:t.A=20,t1.A=20;
//参数的例子。
public void Test()
{
int a=10;
Test t=new Test();
t.A=10;
Parameter(a,t);
Console.WriteLine("Test:a={0},t.A={1}",a,t.A);
}public void Parameter(int a,Test t)
{
a=20;
t.A=20;
Console.WriteLine("Parameter:a={0},t.A={1}",a,t.A);
}
输出结果是:
Parameter:a=20,t.A=20
Test:A=10,t.A=20
以上就是值类型和引用类型的区别。
接口,最好的体现了类的继承,封装和多态的特性。
interface IFruit
{
void MyName();
}class Apple: IFruit
{
// Explicit interface member implementation:
void IFruit.MyName()
{
// Method implementation.
Console.WriteLine("MyName is Apple");
}
}class Orange: IFruit
{
// Explicit interface member implementation:
void IFruit.MyName()
{
// Method implementation.
Console.WriteLine("MyName is Orange");
}
}public class Test
{
static void Main()
{
// Declare an interface instance.
IFruit obj = new Apple();// Call the member.
obj.MyName();
obj=new Orange();
obj.MyName();
}
}输出:
MyName is Apple
MyName is Orange
电神魔傀2街机免费版 官方版v1.2.1
下载三国战纪2手游腾讯渠道服 安卓版v2.41.0.0
下载三国战纪2手游抖音渠道服 安卓版v2.41.0.0
下载三国战纪2折扣服 安卓版v2.41.0.0
下载叫我大掌柜小米版 安卓版v7.4.4
叫我大掌柜小米版是这款模拟经营类手游的渠道服版本,在此版本中
cooking fever正版 安卓最新版v23.0.2
cooking fever正版是一款非常好玩的模拟经营类手游
咖啡厅的生活故事 最新版v1.7
咖啡厅的生活故事是一款模拟经营游戏,玩家们在游戏中可以经营一
迅猛龙模拟器金币不减反增版 v1.1.8
迅猛龙模拟器无限金币版是一款动物模拟类游戏,玩家们将在游戏中
泽塔奥特曼升华器免广告版 v1.4
泽塔奥特曼升华器去广告版是游戏的破解版本,在该版本中为玩家去