IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++第二课~类和对象 -> 正文阅读

[C++知识库]c++第二课~类和对象

目录

类和对象的基本概念:

类的定义:

域作用符补充:

对象的创建:

c++封装链表:


类和对象的基本概念:

什么是类?

  • 一系列事物的抽象,万物皆可为类。
  • 属性:事物的特征--->数据类型描述
  • 行为:事物的操作--->函数描述
  • 类的特点:封装,继承/派生,多态
  • C++的struct是兼容C语言的,所以C++的struct可以当作结构体去使用,另外struct还可以用来定义类,和class定义类是一样的,区别是struct定义类默认访问权限是公有的,class定义类默认访问权限是私有的

什么是对象?

类的具体化,类的实例化.

类的定义:

  • 创建语法:
//创建一个类
class GirlFriend
{
public:
	//共有属性
	//成员函数
	void print()
	{
		cout << m_name << m_age << endl;
	}
protected:
	//保护属性
	//数据成员
	string m_name;
	int m_age;
private:
	//当前类不做继承处理,数据成员写成私有属性
};// 类的成员可以是其他类的对象,但不能以类自身的对象作为本类的成员,而类自身的指针和引用可以作为类    
  //  的成员。  类定义必须以分号“;”结束  。
  • 权限限定 作用

类外只能访问public属性下面的内容,习惯把public属性 叫做 类外的接口

  • 类的两种定义方式 :

声明和定义全部放在类内

声明和定义分开,声明在类内,定义在类外,在类外定义的时候记得加上域作用限定符

访问限定符 : public,protected,private:

1). public修饰的成员在类外可以直接被访问
2). protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的),但是 可以通过提供共有接口间接访问
3). 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4). class的默认访问权限为private,struct为public(因为struct要兼容C)

  • 类外访问类中的数据,只能通过对象访问,当然static成员除外
  • 权限限定词,只是用来限定类外的访问,并不是限定类中的访问
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
class GirlFriend
{
public:
	//共有属性
	//成员函数
	//声明实现全部放类里
	void print()
	{
		cout << m_name << m_age << endl;
	}
	//为了访问不能访问的部分,通常提供一些接口
	void initdata(string name, int age);//类中声明
protected:
	//保护属性
	//数据成员
	string m_name;
	int m_age;
private:
	//当前类不做继承处理,数据成员写成私有属性
};
//类外实现,注意要加类名限定
void GirlFriend::initdata(string name, int age)//表示initdata是属于GirlFriend的
{
	m_name = name;
	m_age = age;
}
int main()
{
	GirlFriend Lisa;
	Lisa.initdata("丽萨", 20);
	Lisa.print();
	//Lisa.m_name; //错误写法:E0265	成员 "GirlFriend::m_name"  不可访问
	//类外只能访问public
	return 0;
}

域作用符补充:

::是运算符中等级最高的,它分为三种:

1)global scope(全局作用域符),用法(::name)。

2)class scope(类作用域符),用法(class::name)。

3)namespace scope(命名空间作用域符),用法(namespace::name)。

对象的创建:

  • 普通对象
  • 对象数组
  • new一个对象
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
class MM
{
public://公有
	void print()
	{
		cout << name << "\t" << age << endl;
	}
	void initData(string nname, int nage)
	{
		name = nname;
		age = nage;
	}
protected://保护
	//新标准,可以在类中给数据直接初始化
	string name="默认值";
	int age=333;

};
int main()
{
	//没有写构造函数的情况下,和C语言创建方式一样的
	MM mm;
	mm.print();
	MM mmArr[10];//一般很少用对象数组
	for (int i = 0; i < 10; i++)
	{
		mmArr[i].initData(string("name") + to_string(i), i + 19);//+表示连接
		mmArr[i].print();
	}
	MM* p = new MM;
	p->initData("李四", 14);
	p->print();
	delete p;
	p = nullptr;

	return 0;
}

初始化:

#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
class MM
{
public://公有
	void print()
	{
		cout << name << "\t" << age << endl;
	}
	//传参方式
	void initData(string nname, int nage)
	{
		name = nname;
		age = nage;
	}
	//返回引用
	string& getname()
	{
		return name;
	}
	int& getage()
	{
		return age;
	}
protected://保护
	//新标准,可以在类中给数据直接初始化
	string name="默认值";
	int age=333;
	//不初始化是垃圾值
};
int main()
{
	MM mm;
	mm.getname() = "小红";
	mm.getage() = 44;
	mm.print();
	

	return 0;
}

c++封装链表:

#include <iostream>
#include <string>
#include <cstdio>
using namespace std;

class Node
{
public:
	int& getdata()//返回引用
	{
		return data;
	}
	Node*& getnext()
	{
		return next;
	}
protected :
	int data;
	Node* next;
};
class List
{
public:
	void creat()
	{
		headNode = new Node;
		headNode->getnext() = nullptr;
	}
	void insertData(int data)
	{
		Node* newNode = new Node;
		newNode->getnext() = nullptr;
		newNode->getdata() = data;

		newNode->getnext()= headNode->getnext();
		headNode->getnext() = newNode;
	}
	void print()
	{
		Node* pMove = headNode->getnext();
		while (pMove != nullptr)
		{
			cout << pMove->getdata() << "\t";
			pMove = pMove->getnext();
		}
		cout << endl;
	}
protected:
	Node* headNode;
};
void test()
{
	List* list = new List;
	list->creat();
	list->insertData(10);
	list->insertData(100);
	list->insertData(1000);
	list->print();

}
int main()
{
	test();

	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:25:11  更:2022-02-01 20:27:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:24:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码