前段时间由于忙于学业,搁置了C++的学习,现在开始C++复健计划,回顾之前的代码复习所学的知识。
话不多说直接上代码:
using namespace std;
struct nosex//结构体,名为nosex
{
string n = "复习";
};
struct boy//结构体,名为boy
{
union { int a = 1; };//共同体,可以嵌入结构体
int high;
char length;
double weight;
struct nosex n;//结构体内的数据可以来自其他结构体
};
struct idle
{
string* q;//一个字符串指针
};
inline void change(int a, int b)//内联函数
{
int tmp;
tmp = a; a = b; b = tmp;
cout << "a=" << a << endl << "b=" << b << endl;
}
class girl
{
private:
int weight;
public:
int age;
char yanzi;
void getweight()
{
cout << weight << endl;
getage();//类内成员函数递归
};
void getage();
void getweight(int w)//成员函数重载
{
cout << weight << endl;
};
girl(int wei, int ag, char yan) :weight(wei), age(ag), yanzi(yan)//初始化
{
cout << "调用了girl类的构造函数girl(int wei, int ag, char yan)" << endl;
}
~girl()
{
cout << "调用了girl类的析构函数" << endl;
}
};
void girl::getage()//类外定义成员函数,并通过函数访问私有变量
{
cout << age << endl;
}
int main()
{
girl xiaoxiao(56.21, 18, '可');
struct boy bobo = { 188,'long',78.21 };
girl* p = &xiaoxiao;//girl类指针,指向girl对象xiaoxiao
(*p).getage();
bobo.n;
string qq = "调用qq字符串";
struct idle idleob = { &qq };//结构体初始化,相当于*q=&qq
cout << *(idleob.q) << endl;
change(187, 178);
}
运行结果:
结构体部分:
struct nosex//结构体,名为nosex
{
string n = "复习";
};
struct boy//结构体,名为boy
{
union { int a = 1; };//共同体,可以嵌入结构体
int high;
char length;
double weight;
struct nosex n;//结构体内的数据可以来自其他结构体
};
struct idle
{
string* q;//一个字符串指针
};
struct boy bobo = { 188,'long',78.21 };
bobo.n;
string qq = "调用qq字符串";
struct idle idleob = { &qq };//结构体初始化,相当于*q=&qq
cout << *(idleob.q) << endl;
首先可以看到结构体的结构是:struct 结构体名 {},括号内可以是各种类型的数据(int,double,char...),可以是其他结构体的数据,也可以是共同体。
什么是共同体呢?共同体(union)是一种数据格式,能够存储不同的数据类型,但是每一次只能存储一个值,共同体的长度等于最大成员的长度,使用共同体可以节省内存空间。
其次是结构体的初始化,结构体初始化的结构为 struct 结构体名 结构体对象名 ={},括号内数据一一对结构体内数据进行初始化,结构体对象可以调用其他结构体的数据(前提是这个数据在这个结构体当中)。当结构体内数据有指针时,用&取地址符使指针指向特定数据,例如代码中的指针q,指向字符串qq,后面通过解引用访问了qq的数据。
解引用*,即通过指针,找到对应的内存和内存中的数据。通过解引用访问或修改指针指向的内存内容,解引用后等价于指针指向的变量。a=99;int*p=&a;(*p)即相当于a。
类部分:
class girl
{
private:
int weight;
public:
int age;
char yanzi;
void getweight()
{
cout << weight << endl;
getage();//类内成员函数递归
};
void getage();
void getweight(int w)//成员函数重载
{
cout << weight << endl;
};
girl(int wei, int ag, char yan) :weight(wei), age(ag), yanzi(yan)//初始化
{
cout << "调用了girl类的构造函数girl(int wei, int ag, char yan)" << endl;
}
~girl()
{
cout << "调用了girl类的析构函数" << endl;
}
};
void girl::getage()//类外定义成员函数,并通过函数访问私有变量
{
cout << age << endl;
}
girl xiaoxiao(56.21, 18, '可');
girl* p = &xiaoxiao;//girl类指针,指向girl对象xiaoxiao
(*p).getage();
首先类内分为private私有,public公有还有protected受保护的,三者区别在以后遇到再说明。在这里我们简单知道,类范围内数据是可以互相访问的无论是否private,在类外就无法直接访问private的数据,但是可以通过间接的方法,例如代码中的getweight()成员函数,通过成员函数间接访问私有变量。第二个是类内成员函数可以递归可以重载等等,限制还是比较少的。
类的初始化,类的初始化格式是 类名 类对象名(),括号内是传入的实参。在构造函数内将数据一一赋给类内的变量,值得一提的是,class如不定义构造函数和析构函数将使用默认构造函数和析构函数,构造函数可以通过改变形参数量,类型,顺序进行重载,析构函数不可以重载。
类外定义或调用类内成员函数,类名::成员函数,即可以在类外调用或者定义成员函数。
类对象的创建和初始化,最常见的形式就是代码中的隐式构造:类名 类对象名(实参列表) 除此之外还有显式构造:类名 类对象=类名(实参列表)
内联函数部分:
inline void change(int a, int b)//内联函数
{
int tmp;
tmp = a; a = b; b = tmp;
cout << "a=" << a << endl << "b=" << b << endl;
}
change(187, 178);
加inline关键字,使常规函数变成内联函数(C++新特性),内联函数的代码和其他程序代码联系起来,编译器将使用相应的函数代码替代函数调用,也就是说使用内联函数时不是调用内联函数的代码,而是使用相应的代码。使用内联函数的好处是提高运行速率,但是占用更多内存,适用于行数少的代码。
本文章主要回顾的知识点有:共同体,内联函数,结构体和类的初始化