C++面向对象程序设计基础

C++面向对象程序设计学习准备

由于今日课程知识点较多且初学难以快速理解、接受,加上初学的知识要加以应用有些困难,希望本文能帮助同学们复习一下今日所学的知识点,万事开头难,但想要学习好这门课程,需要扎实基础知识,期末为应付不挂科临时抱佛脚要花费大量的精力和时间,希望同学们从开始就好好学习,同时也有讲得不清楚的地方还望包涵。

一、C++概述

C++由C发展而来,同时兼容C,C++相对于C而言,输入输出不需要再写格式控制命令符(即"%d"等),极大方便了数据的输入输出。对于初学者而言,要了解C++程序的基本格式与输入输出。

#include <iostream>
using namespace std;
int main()
{
	
	return 0;
}

每次写程序都先写这个框架。管你会不会,写就完了。
下面介绍最基本的操作,基础的输入输出用法如下:

1、输入:cin>>
对于 " >> "这个符号可形象地理解为从屏幕接收数据给定义的变量,从外指向变量。
例如:

#include <iostream>
using namespace std;
int main()
{
	int a;
	cin>>a;
	return 0;
}

对于多个变量的同时读入如下:

#include <iostream>
using namespace std;
int main()
{
	int a,b;
	cin>>a>>b;
	return 0;
}

需要注意的是当变量为字符数组时,读到空格或换行会终止读入(与printf的 “%s” 类似),如果有多个变量,会等待下一个输入。例如:

#include <iostream>
using namespace std;
int main()
{
	int a;
	char s[10];
	cin>>s>>a;
	printf("%d %s\n",a,s);
	return 0;
}

样例如下:
在这里插入图片描述
2、输出:cout<<
out是外,cout即输入,"<<" 可理解为变量的值向屏幕输出,从变量指向外,与 “>>” 相区分(多加练习自然会熟练)。
多组输出如下:

#include <iostream>
using namespace std;
int main()
{
	int a;
	char s[10];
	cin>>s>>a;
	cout<<a<<' '<<s<<endl;
	return 0;
}

输入输出结果与上面相同,不同的是 “>>endl” (换行输出),等价于 ">>’\n’ "。

二、正篇

1、注释(这个简单,一笔带过)

#include <iostream>
using namespace std;
int main()
{
	//int a;	(单行注释)
	
	/*			(多行注释) 
	char s[10];
	cin>>s>>a;
	cout<<a<<' '<<s<<endl;
	*/ 
	return 0;
}

2、全局变量与局部变量

#include <iostream>
using namespace std;
int b;
int sum(int x,int y)
{
	x+=b;
	return x+y;
} 
int main()
{
	int a;
	char s[10];
	b=4;
	cin>>s>>a;
	cout<<a<<' '<<s<<endl;
	return 0;
}

全局变量可在任何地方被调用,不受限制,而样例中sum函数的x与y变量为局部变量,仅在函数内部有效,若在主函数中给x或y赋值,将会报错。局部变量在定义swap函数时会出错,函数形参交换而实参并没有交换,导致错误。

3、结构体

C语言还未学到的知识点,有心的同学可以去翻一下书,结构体的出现为我们自己定义一个数据类型提供了途径。下面介绍基本用法:

struct name{/*可自己任意取名称作为新的变量名,这里取名name*/
	int a;
	double b;
	float c;
	char d;
	bool d;
	int e[10];
	char f[10];
};

这里的struct name可看作一个自己定义的新的数据类型,等价与int,double等,与int定义变量一样定义,如下:

struct name s;//可将struct看成一个整体,当作新变量类型名

其中s为变量名,要注意的是C中struct不能省略,而C++可直接写为:

name s;//这里与int a的定义更加匹配

此外:

struct name{
	 char Name[10];
	 int age;
}s={"123123",19}

这种写法将变量与结构类型捆绑了起来,不利于后面定义该数据类型的变量,所以不建议写,可写作:

struct name{
	 char Name[10];
	 int age;
}(struct) name s={"123123",19}//括号表示可省略,上面已解释
								//同时赋初值可如此操作

插入一下struct和class的区别,struct默认public,而class默认private。
联合和共用不常用,了解一下会做题或者认识即可。

4、指针

在讲const前,先好好讲一讲指针。
首先,指针指向的永远是地址!!!指针变量与普通变量一样,只不过普通变量存储在内存地址的是对应数据类型的值,而指针变量存的是地址。

int a=6;
int *p;
p=&a;
*p=7;

这里定义了一个int型的变量a并赋初始值6,p指针指向了a的地址(即0x6ffe14),所以* p 的值为a变量的值,* 可理解为一种运算符号,作用是取地址上的值,也可进行修改,上面的 *p=7是可行的,a变量的值也修改为7。

变量地址
a0x6ffe146
char *p="abc";//意思是字符串abc的首地址由指针p来指向

前面所学的数组也是指针:

int a[10]={0,1,2,3,4,5,6,7,8,9};
int *p=a;//或*p=&a[0]	均为指针指向a数组的首地址
cout<<*p<<endl;
cout<<*(p+1)<<endl;
cout<<*p+1<<endl;
p++;
cout<<*p<<endl;

让我们来分析一下结果,首先p指向了a的首地址(即a[0]的地址,存储的数值为0),*p取值,输出为0;然后p+1为p所指地址的下一个地址(即a[1]的地址,存储的数值为1),*取值,输出1;由于 " * " 的优先级高于 " + " ,所以先取 * p的值,再进行0+1的运算,输出1;最后p++表示指针右移,指向下一个地址(即a[1]的地址),再取值,输出1。
关于指针的用法的细节等待你取探索。
在这里插入图片描述

5、const修饰符

讲完指针,来讲const,const’是恒定的、不变的意思。

const char *p="123";//值不变
char const *p="456"; //地址不变

记住一句话,指针永远指向地址,第二种就好理解了,p指向"123"首地址,const再char后,表示p所指的地址不再发生改变(即p永远指向一个确定的地址),地址上存储的之可以改变;第一种const在最前,表示指针所指的指不能够修改,但是指向的地址可以改变,二者并不矛盾。对于p[0],p[1]这样的表示,上面有提到数组与指针的关系,指针可通过数组下标的方式访问元素。别杠,你杠就你对。

6、内联函数

由于函数刚刚学过就跳过了,直接进入内敛函数。
先了解一下宏定义:

#define N 1+3
#define M N*N//结果不是16而是7

其实宏定义是一种替换,NN并不是我们想的(1+3)(1+3)=16,而是1+3*1+3=7,宏定义是一种机械的替换,你怎么写它就怎么照搬,也不会给你加括号,有一种解决办法就是加括号,如#define N (1+3)这样算出来就是16了,由于这种不安全性,引入了内敛函数。
程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换,而对于普通函数,都是在运行时候才被替代。内联函数是用空间换时间。
内敛函数与普通函数的区别是在最前面加一个inline即可。

7、带有默认参数的函数

举例形象又好理解,这里就举例了:

#include <iostream>
#include <math.h>
using namespace std;
double dis(double x=0,double y=0)
{
	return sqrt(pow(x,2)+pow(y,3));
}
int main()
{
	cout<<dis()<<endl;
	cout<<dis(3)<<endl;
	cout<<dis(3,4)<<endl;
	return 0;
}

输出如下:
在这里插入图片描述

这里需要注意的是,形参表中同时有无默认值和有默认值的形参时,有默认值的形参要放到无默认值形参的后面。

8、函数的重载

1、个数的重载
int max(int a,int b)
{
	return (a>b) ? a:b;
}

int max(int a,int b,int c)
{
	if(a>b&&a>c){
		return a;
	}
	return (b>c) ? b:c;
}
2、数据类型的重载
int max(int a,int b)
{
	return (a>b) ? a:b;
}

double max(double a,double b)
{
	return (a>b) ? a:b;
}

void max(int a,int b)
{
	if(a>b) cout<<a<<endl;
	else cout<<b<<endl;
}

重载与带默认值函数在使用时要注意一下两点:
1、函数形参完全相同,返回值类型不同不允许重载;
2、 二义性;
3、实参与形参的类型。

第一次写,写到半夜,错误的地方还请指出,多多包涵,希望对同学们有帮助。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值