C++类基础学习(1)

类基础学习(C++)

题录:作者是个博客小萌新,C++已学习了一段时间,做过几个小项目(VS+qt的),但都很简单,在深入学习时,发现但个人缺少系统的总结以及整体知识框架的构建,所以准备通过CSDN这个平台,每天记录个人笔记的形式,将C++基础方面尤其式个人薄弱的知识i点进行总结(所以有一些基础概念就不放了),同时会上传个人测试代码,有些不对或者遗漏的地方,可以在评论区指正或指教,希望大家共同进步。C++的学习之路,十分漫长。我也将持续地学习并发布学习笔记,路漫漫其修远兮。

文章目录

  • 类基础学习(C++)
    • 类的简单了解
      • 类的定义:
      • 类的构造函数:
      • 类的静态成员(static)
        • 静态成员变量:
        • 静态成员函数
      • 补充:
        • C++中 struct与class的区别:
        • this指针问题:
        • 类的作用域

类的简单了解

类的定义:

直接看代码,注意所有类的成员声明必须再类的内部;

class class_name{
private://以下成员为私有
    
public://以下成员为公有
   class_name();
   class_name(int a,int b);//构造函数可以重载,但没有返回值,构造函数名字与类名一定要相同
protected://以下成员为保护类型
   
};//逗号别忘了

类的成员主要就是成员变量、以及成员函数。

属于private:只能被类自己的成员函数调用,不能被外部调用;

属于public:可以被类自己成员函数调用,也可以被外部调用;

属于protected:只有类中成员函数、以及派生类可以访问段中成员

直接上代码例子

例子中,iphone的成本价格是属于私有成员,不能外部访问,而public的价格(price)可以被访问。

如果想外部访问私有成员怎么办呢? 如例子中的get_chenben(),通过public的成员函数来调用想访问的私有成员即可。

#include
using namespace std;

class iphone
{
	float chengben;//C++,class,在没有给定字段时,默认为私有
	
public:
	float price;
	iphone()
	{
		this->chengben = 998;//这里的this指针指向的是这个类型实例化的对象。这里就是myphone
		price = 6998;//this指针其实会自动调用,这里不写也没事。
	};//类的构造函数
	float get_chenben()
	{
		return chengben;
	}
    float lirun();//在外部定义
};


int main()
{
	 iphone myphone;
	 
	cout << "iphone价格:" <

结果:

iphone价格:6998
iphone成本:998
iphone利润:6000

类的构造函数:

定义(copy C++primer):类通过一个或几个特殊的成员函数来控制对象初始化的函数,这些函数就是构造函数

首先个人理解,类可以看作一种数据类型,当我们定义一个类之后,只有在用该类型初始化一个变量(对象)时,构造函数才会调用。所以构造函数一般是在public段(不然你咋访问呢);

类的构造函数特点

构造函数可以重载,但没有返回值,构造函数名字与类名一定要相同(见本文第一个代码)

此外,类的构造函数如果不写,系统也有默认的构造函数(不显示)

float iphone::lirun()
{
	return price - chengben;
}

类的静态成员(static)

静态成员定义:在整个程序生命周期里,这个变量的地址静止不变**(注意是地址不变,它的值是可变的)**

故在C++类中,类的静态成员变量就和类绑定在一起了,静态成员变量是属于整个类,而不是属于单个的对象,因此静态成员变量需要在类外单独分配空间。

静态成员变量:

废话不说,直接看代码(主要看静态成员变量的定义、调用,以及特殊情况静态整型常量定义问题)

注意:静态成员不能在类内初始化,常量成员也不能在类内初始化。但是静态常量(整型)成员可以在类内部初始化
    class study
{
public:
	string name;
	//静态成员对于public\private字段适应规则与普通变量一致
	static const unsigned xuefei = 300;//静态成员常量(整型)需直接在类的内部定义
	static string teacher;//非静态成员常量不能,必须在外部定义
	static const string school ;//非整型是外部定义
	study(string name)
	{
		this->name = name;
	}
	string getrec()
	{
		return teacher;
	}
};
string study::teacher="马大爷";
const  string study::school = "希望中学";//外部定义,不定义就报错啦
###############################################################
调用:
string p[3] = { "小明","小李","小花" };
		study xiaoming(p[0]);
		study xiaoli(p[1]);
		study xiaohua(p[2]);
		printf("学校:%s,学费:%d\n", study::school.c_str(), study::xuefei);
		printf("小明学校:%s,学费:%d\n",xiaoming.school.c_str(), xiaoming.xuefei);//static成员变量可以被该类型对象调用,也可以直接用类名调用
		//以下例子可以看到,可以通过对象、类名来调用与更改静态成员变量,静态成员变量为所有同类型的对象共享!
		printf("小李老师:%s,小花老师:%s\n", xiaoli.getrec().c_str(), xiaohua.getrec().c_str());
		xiaoming.teacher = "葛军";
		printf("小李老师:%s,小花老师:%s\n",xiaoli.getrec().c_str(),xiaohua.getrec().c_str());
		xiaohua.teacher = "小诸葛";
		printf("小李老师:%s,小花老师:%s\n", xiaoli.getrec().c_str(), xiaohua.getrec().c_str());
		 study::teacher = "张宇";
		printf("小李老师:%s,小花老师:%s\n", xiaoli.getrec().c_str(), xiaohua.getrec().c_str());

结果:
学校:希望中学,学费:300
小明学校:希望中学,学费:300
小李老师:马大爷,小花老师:马大爷
小李老师:葛军,小花老师:葛军
小李老师:小诸葛,小花老师:小诸葛
小李老师:张宇,小花老师:张宇

静态成员变量不能在类中定义原因:

静态整型成员变量可以在内部定义原因:

静态成员变量总结(哎,代码不想看了,看这里!)

静态成员变量声明:变量前面+static;

静态成员变量使用:可以使用 类名+作用域运算符 :: 来调用该成员,也可以通过该类型的对象来调用。类的所有成员函数(包括静态域非静态)都可以调用该变量。

静态成员变量定义:在类外部定义(只有整型常量可以在内部);(即在外部给静态变量分配内存)

静态成员函数

今天时间不多了,代码就简陋一下了

静态成员函数,可以看出C++类中一个特殊的成员函数,主要特点:

  1. 属于整个类,this指针不包含他(因为this指针就是 对象的地址,指向对象)

  2. 只能访问静态成员函数、静态成员变量

  3. 类名、所有该类型的对象都可以调用、访问他。

	class CMP
    {
	static const int b = 25;
	static int sum(int a)
	{
		return a * b;
	}
    };
CMP ans;
cout<

补充:

  1. C++中 struct与class的区别:

    与C不同,C++中的struct既可以有成员变量,也可以有成员函数,与class的区别就是默认的访问权限不同,C++默认权限是private,strucrt默认是public。

  2. this指针问题:

    this指针是顶层const对象,这意味着this指针指向的内存地址为常量,但其指向的对象可以改变(比如例子中,对myphone的price、chengben进行初始化)

  3. 类的作用域

    类的定义可以可以在外部实现,主要通过::作用域符号来实现;如果是在其它源文件定义时,注意要调用所声明类的文件。

你可能感兴趣的:(C++,c++,学习)