C++⾯向对象程序设计教程
前⾔
全篇使⽤标题+代码的形式,知识点的介绍写在代码部分的注释⾥。书籍为《C++⾯向对象程序设计教程(第四版)》(陈维兴 林⼩茶 编著)。
第⼀章为基础概念,过于简单;第七章为输⼊输出流,个⼈理解不深,⽬前使⽤较少,两章节暂时省略,后期会补充第七章的内容
第2章 C++概述
2.1 进制输出
#include<iostream>
using namespace std;
int main()
{
int x =25;
cout << hex << x <<' '<< dec <<' '<< oct << x << endl;
//hex⼗六进制,dec⼗进制,oct⼋进制,cout << '\n'与cout << endl作⽤相同
return0;
}
2.2 const辨析
#include<iostream>
using namespace std;
int main()
{
const char*name ="zhou";//指向常量的指针
/
/name[3] = 'a'; 出错,以上的const修饰char,字符数组⽆法更改
//name = "zhang"; 正确,可以修改指针的指向
char*const name ="chen";//常指针
//这⾥注意const和*的位置,*在const前⾯,*本质上是char连带的部分(char *a, *b但才是声明两个指针,*只修饰最近的变量)
//以上const修饰指针
//name[3] = 'a'; 正确,可以修改指针指向的数据
//name = "zhang"; 错误,不能改变指针所指的地址
const char*const name ="chen";//指向常量的常指针
//name[3] = 'a'; 错误,不能改变指针所指地址中的数据
//name = "zhang"; 错误,不能改变指针所指向的地址
return0;
}
2.3 带有默认参数的函数
//函数声明中,形参带有初始值
//带有初始值的参数,右边不能有没有初始值的形参,即需要//int special(int x, int y, int z = 2) 正确
//int special(int x, int y = 3, int z) 错误
int special(int x =5,int y =3,int z =2)
{
return x * y * z;
}
int main()
{
/
/因为函数声明的要求,所以参数省略只能从最右边开始//special(, , 20) 错误,不能省略实参只能从最右边开始
cout <<special(100,70,3)<< endl;
cout <<special(100,70,2)<< endl;
cout <<special(100,70)<< endl;
cout <<special(100,3)<< endl;
cout <<special(100)<< endl;
cout <<special(5)<< endl;
cout <<special()<< endl;
return0;
}
2.4 函数的重载
int square(int i)
{
return i * i;
}
long square(long i)
{
return i * i;
}
double square(double i)
{
return i * i;
}
/*-------------------------------------------------------------*/
int mul(int x,int y)
{
return x * y;
}
int mul(int x,int y,int z)
{
return x * y * z;
}
int main()
{
//重载需要函数参数类型不同,或者参数个数不同,或者⼆者兼⽽有之
//参数类型不同
int i =12;
long l =1234;
double d =5.67;
cout <<"i * i"<<" = "<<square(i)<< endl;
cout <<"l * l"<<" = "<<square(l)<< endl;
cout <<"d * d"<<" = "<<square(d)<< endl;
//参数个数不同
int a =2, b =3, c =4;
cout <<mul(a, b)<< endl;
cout <<mul(a, b, c)<< endl;
return0;
}
2.5 作⽤域运算符
#include<iostream>
using namespace std;
int a =10;
int main()
{
int a =25;
/
/局部变量和全局变量重名,如果希望在局部变量的作⽤域中使⽤同名的全局变量,可以在变量前加上:: //此时,::a代表全局变量a, a代表局部变量a
cout <<::a << endl;
cout << a << endl;
return0;
}
2.6 new与delete
int main()
{
int*ptr;
ptr =new int;
*ptr =10;
cout <<*ptr << endl;
delete ptr;
//new delete与malloc free辨析
//int *p;
// p = (int *)malloc(sizeof(int));
// free(p);
// p = new int; new可以根据类型⾃动计算需要分配内存⼤⼩,⽆需sizeof,同时能够⾃动返回正确的指针类型,不需要强制转换// delete p;
int*p =new int(99);//使⽤99作为初始值赋给*p,只能初始化简单变量,⽆法初始化数组
cout <<*p;
delete p;
//数组的动态分配和释放
int*s =new int[10];
delete[]s;//delete[]指针变量名
return0;
}
2.7 引⽤
2.7.1 初识引⽤
//引⽤作为函数参数,能够通过改变形参来改变实参,C++主张使⽤引⽤⽽不是指针来改变实参void swapp(int&m,int&n)
{
int t;
t = m;
m = n;
n = t;
}
int main()
{
int i;
int&j = i;//引⽤声明时⼀定要初始化,即表⽰j是谁的引⽤
i =30;
//只需要在声明时写出&,其他时候不需要(这就是⽐指针⽅便的地⽅)
//也只有在声明中才是引⽤运算符,其他地⽅都是取址操作符
cout <<"i="<< i <<" j="<< j << endl;
j =80;
cout <<"i="<< i <<" j="<< j << endl;
//变量i和引⽤j占内存的同⼀个位置
cout <<"The address of i="<<&i << endl;
cout <<"The address of j="<<&j << endl;
//不能建⽴引⽤的数组
//不能建⽴引⽤的引⽤
//不能建⽴指向引⽤的指针
int a =5, b =2;
cout << a <<' '<< b << endl;
swapp(a, b);
cout << a <<' '<< b;
return0;析构函数的定义
}
2.7.2 使⽤引⽤返回函数值
#include<iostream>
using namespace std;
int&index(int i);//声明函数返回⼀个整数类型的引⽤
int a[]={1,3,5,7,9};
int main()
{
index(2)=25;//将函数调⽤放在复制元素符的左边,等价于将a[2]赋值为25
cout <<index(2);
return0;
}
int&index(int i)
{
return a[i];//返回⼀个a[i]的引⽤,这样函数调⽤就能够放在左边了
}
2.7.3 加深理解的⼀个程序
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论