函数带默认参数
- C++特有的语法点
C++允许函数的形参带默认参数
2.特点
第一:默认参数在传递实参的时候,必须从左到右连续默认
第二:写默认参数的时候,必须从右往左连续默认
练习:
请问如下写法是否正确
int add(int a=99,int b,int c=8); //语法错误,b断开了,没有默认
int add(int a=99,int b=77,int c=8);
int add(int a=99,int b,int c); //错误
int add(int a,int b,int c=8); //正确
int add(int a,int b=77,int c=8); //正确
int add(int a=88,int b,int c=8); //错误
3.跟函数重载的关系
注意:函数带默认参数,使用的时候参数的传递是很灵活,可能导致函数调用有冲突
C++的行业标准
- C++从诞生开始一直都有更新新的语法规则
C++98 C++03 C++11 C++17
C++也是与时俱进的,语法规则都有更新 - 使用指定标准的C++
g++ 类的练习.cpp -std=c++11 //我要使用C++11标准中的语法规则去编译我C++程序
面向对象编程的三大基本思想 --》类的封装 继承和派生 多态
类的封装
1. 类和对象
类: 生活中也有分类的思想
人: 行为: 劳动 思考 吃 跑 睡觉
属性: 五官 皮肤颜色 国籍 身高 体重
动物:行为: 吃肉 吃草
属性: 毛发颜色 脚
C++为了描述生活中的数据,引入了分类思想
class 类的名字
{
行为--》成员函数/成员方法来描述
属性--》成员变量
};
int a;
struct student stu;
Animal b; //Animal类型的变量(对象),变量(对象)名字叫做b
对象: 类的一个实例
程序员定义了一个类,相当于"发明了一种新的数据类型"
定义类的对象,相当于我们平时定义变量,道理是一样的
- 类的封装
类的封装:程序员自定义一个类
类的成员
分成两种:成员方法和成员属性
类的使用
一般习惯把类名的首字符大写
规则: 类名 对象名;
比如: Animal a; //定义了Animal的一个对象,名字叫做a
对象调用类的成员 - 类的成员权限
目的:C++给成员设置权限目的是为了保护这些数据
C++规定类中成员有三种权限: public(公有) private(私有) protected(保护)
public: 类的成员可以直接通过对象来调用,可以在类的外部使用
private:不可以直接通过对象来调用,只能在类的内部使用
protected:暂时不用理会
默认情况下,如果你定义类,什么权限修饰词都不使用,所有成员都是私有的 - 类和结构体的区别和联系
联系:
定义类的时候 class 类名 或者 struct 类名(一般不建议你使用struct定义类)
普通对象.成员
对象指针->成员
区别一:类中可以定义函数,结构体不可以(结构体只能存放函数指针)
区别二:类中有权限修饰词,结构体没有
5.类的成员函数的两种写法
写法一:把成员方法的定义写在类的里面
写法二:把成员方法的定义写在类的外面
6.类的大小
类的大小跟成员属性有关,跟成员方法无关,也要满足字节对齐
类的成员方法存放在内存的方法区里面,跟成员变量存放的位置不一样
空类的大小:
7.重新认识cout和cin
cout是ostream的一个对象
cin是istream的一个对象
namespace std
{
ostream cout;
istream cin;
}
C++在线API文档 www.cplusplus.com
8.this指针
this指针是指向当前对象的一个指针,哪个对象调用方法,该指针就指向哪个对象
C++中的字符串类(重点,重点,重点)
- C语言表示字符串:
char *
char []
C++表示字符串
char * --》分配堆空间,方法也得自己写
char [] --》长度受到限制,担心数组越界,
class string --》好处,字符串长度不受限制,提供了大量操作字符串的方法,直接调用,省心
练习:
1. 定义矩形类,里面有求面积,求周长的成员方法
2. ostream
istream
good --》判断文件读写是否成功,判断键盘输入的数据是否符合要求
eof --》判断文件是否读完
fail --》判断文件读写是否成功,判断键盘输入的数据是否符合要求
setf --》设置输入输出的格式(进制,浮点数的精度)
unsetf --》取消输入输出的格式的设置
作业:
1. 不可以使用任何C语言的库函数,只能使用string中的方法,实现
只要B字符串中出现的字符(不论大小写),把它从A字符串中剔除
比如: A字符串是 “fhdshffFHDSHF”
B字符串是 “hfdhfd”
2. 封装一个字符串类。该类中有如下成员方法(公有的):
可以把字符串中小写字符转成大写 a(97)–> A(65) ASCII码值相差32
可以逆序存放字符串 首尾交换
剔除字符串中非英文字符
class mystring
{
};