函数
调用函数
函数重载
C++中可以有多个重名的函数,只要参数不同即可,不能通过修改返回类型来修改函数,重载函数的参数类型或数量必须不同。函数重载也称为函数多态。
int store(int, int);
int store(float, float);
int store(long);
内联函数
声明C++函数时,如果使用了inline
关键字,编译器将不会创建该函数,而是将代码直接复制到调用它的地方,inline通常用在经常被调用的函数上,减少了程序跳转的次数。一般inline对程序所得有限。
类的基础学习
声明类
class people
{
public:
char name[10];
unsigned short age;
void sing();
void sleep();
private:
unsigned int height;
unsigned int weight;
};
public:所有类和程序均可用
private:只能在其所属类的函数内访问
创建对象
People xiaoming;
People xiaohong;
xiaoming.age=10;
xiaohong.age=9;
实现成员函数
成员函数的定义以类名打头,然后是作用于解析运算符::
和函数名,
void People::sing()
{
cout<<"I'm sing."<<endl;
}
void People::sleep()
{
cout<<"I'm sleeping"<<endl;
}
构造函数 和 析构函数
每次实例化对象时都将调用他,构造函数的职责是创建一个有效的对象,通常包括初始化成员数据。构造函数与类同名,且没有返回值,可以接受参数,也可以不接受,所以可以有多个构造函数。编译器会根据输入的参数去查找。如果没有定义构造函数,那么编译器将自动提供给一个默认的构造函数,没有参数,一旦定义了构造函数,则编译器不会给默认的构造函数了。
构造函数用于创建并初始化对象,而析构函数用于执行清理工作并释放分配给对象的内存。析构函数由~
和类名组成,不接受参数,不返回值。若不定义,则编译器会提供一个默认的析构函数。
//构造函数
People::People(unsigned short initialAge)
{
setAge(initialAge);
}
//析构函数
People::~People()
{
//执行什么操作看情况而定
}
存取器
int getAge() const;
void aetAge();
主要是get、set,用来获得和修改成员值。
const成员函数
如果使用const
将成员函数声明为常量函数,则表明不会修改任何类成员的值。
声明方法是在括号后面添加const
,定义处也要加上const
int getage() const;
获取年龄不会修改成员值,所以可以声明为常量函数,而setage()修改了成员值,所以不行。
应该尽可能的使用常量函数,如果不小心修改了数值,则编译器会报错提示。
内联实现
可将`inline
放在返回类型前面。也可将函数定义直接放在类的声明里面,自动变为内联。
inline int People::setage(agei)
{
age=agei;
}
class people
{
public:
void getage() const {return age};
...
...
}
注意上面const后面没有分号。
class people
{
public:
void getage() const
{
return age
};
...
...
}
将其他类作为成员数据的类
创建复杂类时,经常将简单类作为复杂类的成员。
如下Point和Line的实现。
MyClass.h
#ifndef MYCLASS_H_INCLUDED
#define MYCLASS_H_INCLUDED
class People
{
public:
People(unsigned short a);
~People();
char name[10];
unsigned short age;
void sing();
void sleep();
void setAge(unsigned short age);
private:
unsigned int height;
unsigned int weight;
};
class Point
{
public:
Point();
~Point();
int getX() const;
void setX(int X);
int getY() const;
void setY(int Y);
private:
int X;
int Y;
};
class Line
{
public:
Line();
~Line();
Point getFirstPoint() const { return First;};
Point getSecondPoint() const { return Second;};
void setFirstPoint(Point Fir);
void setSecodnPoint(Point Sec);
private:
Point First;
Point Second;
};
#endif // MYCLASS_H_INCLUDED
MyClass.cpp
#include"MyClass.h"
#include<iostream>
using namespace std;
//////////////////////////////////////////////////////
People::People(unsigned short initialAge)
{
setAge(initialAge);
}
People::~People()
{
//执行什么操作看情况而定
}
void People::setAge(unsigned short iage)
{
age=iage;
}
void People::sing()
{
cout<<"I'm sing."<<endl;
}
void People::sleep()
{
cout<<"I'm sleeping"<<endl;
}
////////////////////////////////////////////////////////
Point::Point()
{
//////
}
Point::~Point()
{
//////
}
void Point::setX(int sX)
{
X=sX;
}
void Point::setY(int sY)
{
Y=sY;
}
int Point::getX() const
{
return X;
}
int Point::getY() const
{
return Y;
}
Line::Line()
{
/////////
}
Line::~Line()
{
/////////
}
void Line::setFirstPoint(Point F)
{
First.setX(F.getX());
First.setY(F.getY());//Firdt = F;
}
void Line::setSecodnPoint(Point S)
{
Second = S;
}
main.cpp
#include <iostream>
#include"MyClass.h"
using namespace std;
int add(int a, int b);
int main()
{
People xiaoming(10);
People xiaohong(10);
Point A,B;
Line L;
xiaoming.age=10;
xiaohong.age=9;
cout<<"小明和小红一共";
cout<<add(xiaoming.age,xiaohong.age)<<"岁"<<endl;
A.setX(10);
A.setY(20);
B.setX(15);
B.setY(30);
L.setFirstPoint(A);
L.setSecodnPoint(B);
cout<<"L的第一个点是"<<endl;
cout<<"X="<<L.getFirstPoint().getX();
cout<<",Y="<<L.getFirstPoint().getY()<<endl;
cout<<"L的第二个点是"<<endl;
cout<<"X="<<L.getSecondPoint().getX();
cout<<",Y="<<L.getSecondPoint().getY();
return 0;
}
int add(int a, int b)
{
return a+b;
}