C++学习历程(一、C++基础)

1、C++的结构体

struct Employee
{
  int m_nID;
  void setID(int id){m_nID=id;}   
};
int main()
{
  Employee Employee1;
  Employee1.setID(1001);
  Employee1.m_nID=1002;
}

C++结构体可以带方法的,访问权限可以是public、private、protected,并且可以从类或结构体那里继承而来
2、C++的类

class Employee
{
public:
  int  m_nID;
  void setID(int id){m_nID=id;}      
};
int main()
{
   Employee Employee1;
  Employee1.setID(1001);
  Employee1.m_nID=1002;
  cout<<"员工编号"<<Employee1.m_nID<<"\n";
  return 0;
}

C++结构体成员默认访问级别、继承是public,C++类成员默认访问级别、继承是private。

#include <iostream> 
using namespace std;   
//指定命名空间(防止命名冲突),std是C++标准库使用的命名空间

cin>>i>>b>>c;    //输入时用空白符分隔 (空格、回车或Tab键)
cout<<a+b<<endl;    

3、C++输入/输出操纵符

setprecision(int p)设定有效数字的位数
cout<<hex<<i<<' '<<dec<<i<<' '<<oct<<i<<endl;
//注意''会报错;还有,如果设置了进制,这个进制会一直用下去,直到再次设定;
cout << setfill(‘$’) << setw(10) << 10 << endl;
cout << setfill(‘#’) << setw(10) << 10 << endl;
输出结果是:
$$$$$$$$10
########10

4、结构体等可直接作为类型名,内存分配与删除,引用相关

//声明类型时
enum Day{SUN, MON, TUE, WED, THU, FRI, SAT};
union U
{
  char c;
  float f;
  double d;
};
struct Student 
{
  char m_strName[20]; 
  char m_strID[12];
  char m_cSex;
  char m_strMajor[20];
}; 

//定义变量时
Day day;
U u;
Student student1;

//内存的分配和释放,new,delete
new 类型名
new 类型名(初值)
new 类型名[表达式]
int *p, *q, *r;
p = new int(5);   //分配一个整数内存空间,初始值为5
q = new int;      //分配一个整数内存空间,没有初始化
r = new int[10];  //分配10个整数的内存空间,并返回该空间的首地址

//delete运算符用于释放new运算符所分配的空间,以使得该空间能够被重新使用。
delete 指针变量名
delete [ ]指针变量名
s=new int[5]; delete []s;  
   
//引用
//对变量声明一个引用,编译系统不给它单独分配存储单元,i和j都代表同一变量单元。
int i;   int &j=i;      
//引用在初始化后不能再被重新声明为另一个变量的引用(别名)。

//引用做函数参数
void swap(int& m,int& n)     //▲▲▲▲▲
 {   
      int temp;
      temp=m;  m=n; n=temp;    //
 }
 int main()
 {  
      int a=5,b=10;
      cout<<"a="<<a<<"b="<<b<<endl;
      swap(a,b);
      cout<<"a="<<a<<"b="<<b<<endl;
      return 0;
  }
  
  //使用引用返回函数值
  //使用引用可以返回函数的值,采用这种方法可以将该函数调用放在赋值运算符的左边。
  int a[ ]={1,3,5,7,9};
 int& index(int i)     //▲▲▲▲▲
 { return a[i];}
 
 int main()
 {
     cout<<index(2)<<endl;
     index(2)=25;
     cout<<index(2);
     return 0;        
 }

5、内联函数(内置函数)
程序中出现对内联函数的调用时,C++编译器直接将函数体中的代码插入到调用该函数的语句处,同时用实参来代替形参。对于要频繁调用的函数,如果其函数体中的代码很短,可以将其定义为内联函数。

 inline float circle(float r)
 {  return 3.1416*r*r; }
 
 调用时area = circle(i) 直接用area=3.1416*i*i替代

以空间换时间的手段,在内联函数的函数体中,不能有复杂的控制语句,如for语句和switch语句等。
为避免代码过长,只有很短(如1~5条语句)且调用频繁的函数才考虑定义为内联函数。

6、函数重载
当调用函数名相同的重载函数时,编译器会根据实参的类型与个数来匹配这些重载函数,以决定调用哪一个重载函数。通过函数参数的类型或个数不同都能够实现函数重载。


 1. List item

//过函数参数个数不同实现函数重载
#include <iostream>
using namespace std;
double add(double d1, double d2)
{  return d1 + d2;}
double add(double d1, double d2, double d3)
{  return d1 + d2 + d3;}
int main()
{  double d1, d2, d3;
  d1 = 1.1;
  d2 = 2.2;
  d3 = 3.3;
  cout<<d1<<'+'<<d2<<'='<<add(d1, d2)<<endl;
  cout<<d1<<'+'<<d2<<'+'<<d3<<'='<<add(d1, d2, d3)<<endl;
  return 0;
}
//不能仅仅通过函数返回值类型的不同来区分不同的重载函数,因为在进行函数调用时,这两
//个函数的调用形式是相同的

7、带有默认参数的函数

int special(int x=5,float y=5.3);
//调用
special( );                // x=5,  y=5.3
special(25);               // x=25, y=5.3
special(100,79.8);        // x=100,y=79.8
//所有指定默认值的参数都必须出现在不指定默认值的参数的右边,否则出错
//int fun(int i, int j=5, int k);错误
int fun(int i, int k, int j=5);//正确

应用举例


```css
void init (int x=5,int y=10){
	cout<<"x: "<<x<<"\t y: "<<y<<endl; 
} 
int main(){
     init(100,80);  //x=100,y=80      
	 init(25);      //相当于init(25,10),结果为x=25,y=10      
	 init();        //相当于init(5,10),结果为x=5,y=10     
	return 0;
}
//在函数调用时,若某个参数省略,则其后的参数皆应省略而采用默认值

8、作业
1 编写C++风格的程序,通过键盘输入1个整数、1个字符和1个字符串到相应的变量中,然后在显示器上输出这些变量的值。
2 用户通过键盘输入整数的个数n以及每个整数的值,将这些整数存入由new运算符分配的动态数组中,对这n个整数进行排序,并输出排序结果,最后通过delete运算符完成相关内存的释放。
3 编写一个函数,将引用作为函数参数,实现两个复数变量值的交换。提示:首先定义复数结构体。
4 利用函数重载编写3个分别求短整数、整数和双精度数绝对值的函数,要求有输入和输出。

9、答案仅供参考

//1
#include<iostream> 
using namespace std;
int main(){
	int a;
	char b;
    string str;
	cout<<"输入1个整数、1个字符和1个字符串"<<endl;
	cin>>a>>b>>str;
	cout<<a<<" "<<b<<" "<<str<<endl;	
}
//2
#include<iostream> 
using namespace std;
int main(){
	int n;
	cout<<"输入整数的个数"<<endl;
	cin>>n;
	cout<<"输入"<<n<<"个数"<<endl;
	int *a=new int[n]; 
	for(int i=0;i<n;i++)cin>>a[i];
	//选择法排序
//	 int i,j,t,max;
//	 for(i=0;i<n-1;i++){
//	 	max=i;
//	 	for(j=i+1;j<n;j++)if(a[max]<a[j])max=j;
//	 	t=a[i];a[i]=a[max];a[max]=t;
//	 }
	 //冒泡法排序
	  int i,j,t;
	  for(i=0;i<n;i++){
	  	for(j=0;j<n-1-i;j++){
	  		if(a[j]<a[j+1]){
	  			t=a[j];a[j]=a[j+1];a[j+1]=t;
			  }
		  }
	  } 
   
	for(int i=0;i<n;i++)cout<<a[i]<<" ";
	delete []a;
}
//3
#include<iostream> 
using namespace std;
struct Fu{
	float m;
	float n;
	void out(){
		cout<<m<<"+i*"<<n<<endl;
	}
};

void swap(Fu &a,Fu &b){
	Fu t;
	t=a;a=b;b=t;
}

int main(){
	Fu f1,f2;
	cout<<"交换前"<<endl; 
	f1.m=11.1;f1.n=12.22;f1.out();
	f2.m=21.1;f2.n=22.22;f2.out();
	swap(f1,f2);
	cout<<"交换后"<<endl; 
	f1.out();f2.out();
}
//4
#include<iostream> 
using namespace std;
void fun(short a){
	if(a<0)cout<<-a<<endl;
	else cout<<a<<endl;
}
void fun(int a){
	if(a<0)cout<<-a<<endl;
	else cout<<a<<endl;
}
void fun(double a){
	if(a<0)cout<<-a<<endl;
	else cout<<a<<endl;
}

int main(){
	short a;int b;double c;
	 cin>>a>>b>>c;
	 fun(a);
	 fun(b);
	 fun(c);
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值