您的位置:首页 > 编程语言 > C语言/C++

C++课堂笔记0706

2017-07-06 20:10 183 查看
1、变量定义位置

ANSI C 规定,所有局部变量都必须定义在函数开头,在定义好变量之前不能有其他的执行语句。C99 标准取消这这条限制,但是 VC/VS 对 C99 的支持很不积极,仍然要求变量定义在函数开头。
C++ 取消了原来的限制,变量只要在使用之前定义好即可,不强制必须在函数开头定义所有变量。

#include<iostream>
using namespace std;
int sum(int n)
{
    int total = 0;
for(int i = 1; i <= n; i++)
{
   total += i;
}
return total;
}
int main()
{
    cout<<"please input number"<<endl;
int n;
cin>>n;
cout<<"number="<<sum(n)<<endl;
return 0;
}

2、结构体和class

#include<iostream>
using namespace std;
class student{
public:
char name[20];
int age;
    float score;
void sry()
{
   printf("%s %d %.3f\n", name, age, score);
}
};

int main()
{
    class student stu1;
strcpy(stu1.name , "xiaoming");
stu1.age = 19;
stu1.score = 98.9;
//
cout<<stu1.name<<" ,"<<stu1.age<<" ,"<<stu1.score<<endl;
    stu1.sry();

return 0;
}



3、命名空间

C++中采用单一的全局变量的命名空间,如果在一个空间中,两个变量或函数的名字一样,编译的时候就会
 冲突。命名空间就是为了解决C++中函数变量的命名冲突所采取的一种措施,能够解决多模块协同开发出现
 变量函数命名的冲突问题。
     在这里面可以把命名空间理解成文件夹,如果你在hel1这个文件夹中编辑两个hello.cpp肯定会出问题,但是如果
 一个在hel1,一个在hel2这个文件夹中p,这个就不会出现冲突。
 命名空间的必要性: 当程序比较大的时候,需要多人合作,命名空间就非常必要。
#include<iostream>
using namespace std;
namespace nsA{
    void print()
{
   cout<<"nsa"<<endl;
}
}
namespace nsB{
    void print()
{
   cout<<"nsb"<<endl;
}
}

int main()
{
nsA::print();
nsB::print();
    return 0;
}

4、using 声明
    using声明可以出现在全局域和任意命名空间中,也可以出现在局部域中。
    using  namespace_name::name;
    一旦使用using声明,就可以直接引用命名空间中的成员,而不需要再引用该成员的
    命名空间。
    命名空间std,这是最常用的命名空间,而不需要再引用该成员的命名空间。
#include<iostream>
using std :: cin;
using std :: string;
//using std :: cout;
using std :: endl;

int main()
{
    string temp;
cin>>temp;
std::cout<<temp<<endl;

return 0;
}



 5、using的作用域


#include<iostream>
using namespace std;
namespace nsA{
    int var = 1;

}
namespace nsB{
    float var = 12.99;    
}

int main()
{
{
using namespace nsA;
cout<<var<<endl;
}

{
using namespace nsB;
cout<<var<<endl;
}
return 0;
}

6、 函数的重载
 C中,每个函数都必须有唯一的一个名字,这个就必须记住每一个函数的名字。
 例如经常所见的求最大值的函数,数据类型不同,函数名不能相同。
 int max1(int ,int);
 int max2(int ,int, int);
 double  max3(double, double);
 
 C++中允许同名函数存在,但函数的参数个数必须不同:即形参个数不同,或形参
 个数相同,但参数类型有所不同。----这就是重载。

#include<iostream>
using namespace std;
int max(int a, int b);
double max(double, double);
int max(int, int, int);

int main()
{
int a = 1, b = 2, c = 3, d;
double m = 11.1, n = 12.2, p;
d = max(a, b);
cout<<a<<","<<b<<" max = "<<d<<endl;
p = max(m, n);
cout<<m<<","<<n<<" max = "<<p<<endl;
d = max(a, b, c);
cout<<a<<","<<b<<","<<c<<" max = "<<d<<endl;
    return 0;
}
int max(int a, int b)
{
    return a>b?a:b;
}
double max(double x, double y)
{
    return x>y?x:y;
}
int max(int x, int y, int z)
{
    int temp = x>y?x:y;
return temp>z?temp:z;
}

7、带默认值的函数
 函数调用时,形参值是由实参数决定,形参实参必须相同。
 C++还提供一种方法,为形参设置一个默认值,即形参不从实参取值。
 5.1 函数的声明
 默认值在函数声明中提供,但当有声明又有定义时,定义中不允许有默认值。
 如果函数只有定义,则默认值可以出现在函数定义中。

#include<iostream>
using namespace std;
void point(int x, int y = 0, int z = 0)
{
    cout<<x<<","<<y<<","<<z<<endl;
}
int main()
{
int x, y, z;
    cout<<"x, y, z"<<endl;
cin>>x>>y>>z;
point(x);
point(x, y);
point(x,y,z);
return 0;
}



8、new ,delete

(1) malloc ,free
    int *p = (int *)malloc(sizeof(int)*10);
    free(p);
    
(2) new,delete
(2.1) 单个类型 
  int *p = new int;
  delete p
  
(2.2) 希望连续分配的数据 
 int *p = new int[10];
 delete[] p;

 9、inline 内联函数
 
 函数调用的时候会发生一些时间开销:系统栈的保护,参数的传递,栈的恢复;?
 对于函数体比较小,执行时间短但频繁使用的函数来说,这种开销比较大。
 内联函数机制,不是在函数调用的时候发生转移而是在编译的时候将函数体嵌入到每个内联函数
 调用处,可以省去调用进栈出栈的时间开销。
 函数的定义:
 inline  <类型标识><函数名>(形参列表)
 {
    函数体
 }
 
 必要说明:
 1) 内联函数不能含有循环语句,swtich语句
 2) 内联函数必须在调用之前声明和定义;
 3)内联函数不能指定抛出异常类型;
 4)inline只是修饰函数向编译器提出内联请求,做不作为内联函数由编译器决定;

 #include <iostream>
 using namespace std;
 inline  int max(int,int);
 
 int main()
 {
     int a[10];
     cout<<"input 10 members:"<<endl;
     
     for(i=0; i<10; i++)
     {
         cin>>a[i];
     }
     int temp=a[0];
     for(i=0; i<10; i++)
     {
         temp = max(temp, a[i]);
     }
     cout<<"in 10 members is max :"<<temp<<endl;
     return 0;
 }
 
 inline int max(int x,int y)
 {
    return x>=y>x:y;
 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: