C++笔记(七)——类1:定义、命名规则、类成员函数的定义方式(含字符串输出举例)、对象的定义及引用

  在基于对象的程序设计方法中,我们通过一组数据抽象来建立问题的模型,在C++中我们把这些抽象称为。比如图书馆资料登记/借阅系统就是由类的抽象实例(比如书名、借阅者、还书时间等)之间的相互作用表现出来,以此来表示出图书馆的抽象概念。     

一、类的定义

        在C++中,类的定义方式与结构体类似,只是使用class关键字定义。通常先写接口实现。所谓的接口就是类头加“{}”,实现就是中括号内的内容。

class  类名

{

      数据和方法的定义

};//注意类的结尾要有分号

 

 

 

              类

类头

Class 类名

类体

{

属性;//即变量,成员变量

方法;//即函数,类内的描述方法

};

        类的定义包含两部分,类头类体。类头由class关键字类名构成。类体由一组大括号“{}”和一个分号“;”构成,类体中通常定义类的数据方法,其中数据即变量,描述的是类的特征,也被称之为属性或数据成员,数据成员可以是任何数据类型,但不能用auto、reqister或extern说明;不能在类的声明声明中给数据成员进行初始化,因为声明的类没有空间。方法实际上是类中定义的函数,也称之为方法,描述的是类的行为。这些操作称为成员函数或方法

二、命名规则

  •           在C++中定义类时,类名通常大写字母C开头(CUser、CXx)成员变量用“m_”为前缀,这已是一个约定俗成的习惯。

    当把数据成员_size放在类的私有区内时,我们要声明一个公有成员函数,以便允许用户访问它的值。但C++不允许成员函数与数据成员共享同一个名字,所以一般在数据成员名字前面加一个下划线 "_" ,比如“_size”。因此我们有了公有函数size()和私有数据成员_size.

三、成员函数的定义方式(类内\外定义)

        在定义类的方法时,方法的定义可以直接放置在类体内,也可以将方法的定义放置在类体之外,在定义类时只提供方法的原型。方法的定义放置在类体外方法名称前需要使用类名和域限定符::来标记方法属于哪一个类

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

class CUser
{
private:
	int m_num;
	char m_Username[120]; //成员变量
	char m_Password[120];
	char* NAME;

public:
	bool Logic(); //函数成员在类外定义

	bool Logic(char* name, char* num)  //成员函数在类内定义
	{
		if (strcmp(name, "hello") == 0 && strcmp(num, "123456") == 0)
		{
			cout << "成员函数结果:登录成功!" << endl;
			cout << endl;

			cout << "字符串输出的第一种形式:" << endl;
			strcpy(m_Username, "变量为字符型数组的用strcpy可赋值字符串");
			cout << m_Username << endl;
			cout << endl;

			cout << "字符串输出的第二种形式:" << endl;
			cout << "单个数组输出单个字符";
			m_Username[0] = 'h';
			cout << m_Username[0] << endl;
			cout << endl;

			cout << "字符串输出的第三种形式:" << endl;
			NAME = "采用指针型变量可赋值字符串";
			cout << NAME << endl;
			cout << endl;
			return true;
		}
		else
		{
			cout << "登录faile" << endl;
			return false;
		}
	}
	void setNum(int x) //函数成员在类内定义
	{
		m_num = x;
		cout << "Num =" << m_num << endl;
	}
};

bool CUser::Logic() //成员函数
{
	cout << "Username :" << endl;
	cin >> m_Username ;

	cout << "Password :" << endl;
	cin >> m_Password;

	if (strcmp(m_Username, "hello") == 0 && strcmp(m_Password, "123456") == 0)
	{
		cout << "登录成功" << endl;
		return true;
	}
	else
	{
		cout << "登录faile" << endl;
		return false;
	}
}

int main()
{
	//实例化成员函数
	CUser Bob;

	Bob.Logic((char*)"hello",(char*)"123456");
	Bob.Logic();

	getchar();
	return 0;
}

结果:

      注:在定义类的成员变量或数据成员不能够对进行初始化

四、对象的定义及引用

对象的引用

       是指对对象成员的引用,不论是数据成员,还是成员函数,只要是公有的,就可以被外部函数直接引用;

引用方式:

对象名.数据成员名

对象名.成员函数名(实参表)

或者当对象是指针时:

对象名->数据成员名

对象名->成员函数名(实参表)

例如:

int main()
{
        //实例化对象
	CStu *p = new CStu; //申请内存,对象为指针形式

	p->setNum(34);
	p->setName((char*)"Lily");
	cout << "num =" << p->getNum() << endl;
	cout << "num =" << p->getName() << endl;

	delete p; //释放内存

        //实例化对象
        CStu Lucy;
	Lucy.setNum(100);
	Lucy.setName((char *)"Lucy");
	cout << "Lucy.num = " << Lucy.getNum() << endl;
	cout << "Lucy.name = " << Lucy.getName() << endl;

	getchar();
	return 0;
}

拷贝方式:值拷贝

注;

  • 在使用对象赋值时,两个对象的类型必须相同
  • 两个对象之间的赋值,仅仅使这些对象中的数据相同,而两个对象仍然是独立的对象,它们有各自的数据成员。
  • 将一个对象的赋值给另一个对象时,多数情况下都是成功的,但当类中存在指针时,可能会产生错误


 

 


 

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值