初涉C++(一)

          最近工作量不大,所以抽空来学习C++,听很多人说C++不难,但学习三年C++尚且晕乎乎也是正常的,鉴于此,我打算把我学习的东西贴出来,因为学会一个东西最好的方法就是把这个东西教给别人,可能我学习的过程中有很多的问题,所写的或有不正确的地方,都希望各位程序爱好者能够一一指正。 

        刚开始学习C++的类,开始的时候遇到一个小问题,可能是急于求成的原因吧:因为C++的标准化后,很多C的头文件在C++中用起来已不是那么方便了,比如说C中的StrCpy函数在C中是引入头文件#include<string.h>的,而在C++中是引入#include<string>的,因为.h文件都是C的,当然C++为了兼容C也可以引入#include<string.h>,而且在C++中,StrCpy函数用strcpy_s代替。

       C++类的语法结构和Objective-C类似,都可包含头文件和实现文件,而在C++中类方法的实现可以和定义一起,即可以在定义的同时实现,而Objective-C不可以。总得来说C++的灵活性很大,所以应该很难学,因此稍安勿躁得好。

 这里我把C++和Objective及C#对比,是因为我学过了OBC和C#,希望OBC和C#的基础能给学习C++带点帮助。

      类的定义(姑且这以说,因为没仔细C++的专业术语,仿照OBC和C#的吧),和结构体类似,应该是和OBC里类的定义是差不多的:

class ClassName
{
public :
    公有成员
    公有方法
private:
    私有成员
    私有方法
};//和结构体一样,分号不能少

例如我定义的Person类,包含两个公有方法和两个私有变量,这里是和OBC一样在头文件里定义的。(Test.h)

class Person
{
public:
	void ChangeName(char *lname);
	void ChangeSex(int lsex);

private:
	char name[20];
	int sex;
};


然后在实现文件里(Test.cpp文件)实现的,当然需要引入头文件(Test.h)

void Person::ChangeName(char *lname)
{
	strcpy_s(name,lname);
}

void Person::ChangeSex(int lsex)
{
	sex = lsex;
}


C++可以在类定义的时候实现方法

class Person
{
public:
Person(char *_name,int _sex)
{
	strcpy_s(name,_name);
	sex = _sex;
}
private:
	char name[20];
	int sex;
};

Person()
{
	cout<<"Call Release"<<endl;
}

void ChangeName(char *lname)
{
	strcpy_s(name,lname);
}

void ChangeSex(int lsex)
{
	sex = lsex;
}

 

在OBC中的实例化类的方法是用 Test test = [[Test alloc]init] 这种方式来实例化的,在C++中用的是构造方法来创建实例初始化的,构造方法没有返回值,而且一个类中可以有多个构造函数(和OBC中Init方法有多个一样)。构造函数的函数名和类名一致。如之前定义的Person类的构造函数Person(char *_name,int _sex)带两个参数。

Person(char *_name,int _sex);

在OBC中有alloc就必须有Release,在C++也一样,与构造函数对应的析构函数(其实和OBC中很类似了)析构函数也没有返回值,但它也没有任何参数,如~Person();,析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作。

构造函数的特点:
1.它的函数名与类名相同;
2.它可以重载;
3.不能指定返回类型,即使是void也不行;
4.它不能被显式调用,在创建对象的时候被自动调用。


 类的实例化

Person p = Person("zheng",1);

 

下面就是头文件和实现文件

Test.h

#include <iostream>

using namespace std;
class Person
{
public:
	Person(char *_name,int _sex);
	~Person();
	void ChangeName(char *lname);
	void ChangeSex(int lsex);
	void Print()
	{
		cout<<"name:"<<name<<endl<<"sex:"<<sex<<endl;
	}
	
private:
	char name[20];
	int sex;
};


Test.cpp

#include <iostream>
#include <string>
#include "Test.h"

using namespace std;

Person::Person(char *_name,int _sex)
{
	strcpy_s(name,_name);
	sex = _sex;
}

Person::~Person()
{
	cout<<"Call Release"<<endl;
}

void Person::ChangeName(char *lname)
{
	strcpy_s(name,lname);
}

void Person::ChangeSex(int lsex)
{
	sex = lsex;
}


void main()
{
	char n[] = "liu";
	int s = 1;
	Person p = Person("zheng",1);
	p.ChangeName(n);
	p.ChangeSex(s);
	p.Print();

	system("pause");
}


  

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值