C++学习笔记:类

头文件student.h

#pragma once
#include <string>
#include <iostream>
using namespace std;
class student
{
public:							//公有的
	student();					//构造函数
	/* 重载构造函数 */
	student(int,string,char);	//构造函数的重载规则和普通函数的重载规则一样
	student(int);				//重载并且初始化参数列表
	/* 析构函数 */
	~student();					//没有参数,只能有一个
	void set()					//在类里面定义成员函数
	{
		cin >> num;
		/* 封装隐藏使num不小于0 */
		if (num < 0)
		{
			num = 0;
		}
		cin >> name;
		cin >> sex;
	}
	void display();				//打印函数声明
private:						//私有的
	int num;
	string name;
	char sex;
protected:						//受保护的

};

student.cpp

#include "student.h"


student::student()									//使用构造函数初始化数据成员
{
	num = 0;
	name = "0";
	sex = 65;
}
student::student(int x,string z,char y)				//带参数的构造函数重载
{
	num = x;
	name = z;
	sex = y;
	display();										//在构造函数里调用输出函数
}
student::student(int x) : name("李云龙"), sex(67)	//初始化参数列表的构造函数
{
	num = x;
	display();
}


void student::display()								//在类外定义display函数   ::作用域限定符 声明函数是属于哪个类的
{
	cout << "num:" << num <<'\t';
	cout << "name:" << name << '\t';
	cout << "sex:" << sex << endl;
}

student::~student()
{
}

主文件main

#include <iostream>
#include <Windows.h>
#include <string>
#include "student.h"
using namespace std;

student stud1, stud2;		//定义两个类对象

int main()
{
	stud1.set();					//调用公有函数给变量赋值
	stud1.display();				//stud1是对象,display是方法,stud1.display();就是一个发给对象的消息
	stud2.display();				//调用构造函数初始化后的结果
	stud2 = stud1;					//用对象给对象初始化
	stud2.display();
	student stud3(2, "落小熙", 66);	//调用带参数的构造函数
	student stud4(3);
	student* stud5 = new student(4, "萧琳儿", 68);//指针调用 堆内存:动态申请内存大小
	delete stud5;

	/* 对象数组的定义以及赋值 */
	student stud[3] =				//赋值的同时会调用重载的构造函数进行输出
	{
		student(5,"小李子",69),
		student(6,"吴清源",70),
		student(7,"李小二",71)
	};

	/* 指向对象成员函数的指针 */
	void (student :: *ptr)();		//定义一个student类的函数的指针
	ptr = &student::display;		//把student类里的display函数的地址给ptr
	(stud1.*ptr)();					//调用ptr所指向的成员函数

	/* 常对象 */
	student const stud6(8, "史蒂夫", 72);//在stud6的生命周期中,对象stud6的所有数据成员的值都不能更改
	//this指针可以作为函数返回值,return *this;表示返回引用。
	
		system("pause");
	return 0;
}

运行结果

运行结果

对象的赋值与复制

对象的赋值是对一个已经存在的对象赋值,
因此必须先定义被赋值的对象,才能进行赋值。而对象的复制则是从无到有地建立一个新的对象,并使它与一个已有的对象完全相同(包括对象的结构和成员的值)。
student stud=stud1; (对象的复制,无需定义stud1)

静态成员

以static开头 如果希望对象中的数据成员的值是一样的, 就可以把它定义为静态数据成员,这样它就为各对象所共有。
静态的数据成员在内存中只占一份内存空间(而不是每个对象都分别为它保留一份空间)。 int student::height = 10;
(公有的)静态数据成员可以初始化,但只能在类体外进行初始化。 数据类型 类名::静态数据成员名 = 初值;
不能用参数初始化表对静态数据成员初始化。

静态成员函数

静态成员函数是类的一部分而不是对象的一部分。
如果要在类外调用公用的静态成员函数,要用类名和域运算符“::”。
如: static int volume(); Box::volume();
静态成员函数没有this指针。
静态成员函数主要用来访问静态数据成员,而不访问非静态成员。

友元

友元函数 v
使用方法:在普通定义函数前加friend 友元函数可以访问这个类中的私有成员 友元类 不仅可以将一个函数声明为一个类的“朋友”,
友元类
而且可以将一个类(例如B类)声明为另一个类(例如A类)的“朋友”。 这时B类就是A类的友元类。友元类B中所有的函数都是A的友元函数,
可以访问A类中的所有成员。友元的关系是单向的,并且不能传递。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值