现在的位置: 首页 > 综合 > 正文

初涉C++(一)

2019年07月22日 ⁄ 综合 ⁄ 共 2358字 ⁄ 字号 评论关闭

          最近工作量不大,所以抽空来学习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");
}

  

 

【上篇】
【下篇】

抱歉!评论已关闭.