栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

嵌入式linux基础:c++(三)程序结构

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

嵌入式linux基础:c++(三)程序结构

文章目录
  • 1.程序结构

1.程序结构

上一文说到了函数写在了类里面,那么可不可以写在类外面。

#include 

class Person {
private:
	char *name;
	int age;
	char *work;

public:
	void setName(char *name);//在class里面只是申明
	int setAge(int age);
	void printInfo(void);
};

//void setName(char *name); persom::
void Person::setName(char *name)
{
	this->name = name;
}

int Person::setAge(int age)//将这个写到类的外面去,写成person::表示,person这个类里面的这个函数。
{
	if (age < 0 || age > 150)
	{
		this->age = 0;
		return -1;
	}
	this->age = age;
	return 0;
}

void Person::printInfo(void)
{
	printf("name = %s, age = %d, work = %sn", name, age, work); 
}

int main(int argc, char **argv)
{
	Person per;

	//per.name = "zhangsan";
	per.setName("zhangsan");
	per.setAge(200);
	per.printInfo();
	
	return 0;
}

一个团队,由A实现person类,由B实现main函数。B只关心怎么用person内。那么A就要提供person.h以及person.cpp

代码如下:

main.cpp

#include 
#include "person.h"

int main(int argc, char **argv)
{
	Person per;

	//per.name = "zhangsan";
	per.setName("zhangsan");
	per.setAge(200);
	per.printInfo();
	
	return 0;
}

person.h

#include 

class Person {
private:
	char *name;
	int age;
	char *work;

public:
	void setName(char *name);
	int setAge(int age);
	void printInfo(void);
};

person.cpp

#include 
#include "person.h"

void Person::setName(char *name)
{
	this->name = name;
}

int Person::setAge(int age)
{
	if (age < 0 || age > 150)
	{
		this->age = 0;
		return -1;
	}
	this->age = age;
	return 0;
}

void Person::printInfo(void)
{
	printf("name = %s, age = %d, work = %sn", name, age, work); 
}


继续修改代码,让程序更加复杂 假设进入一个新人要实现Dog类。


main.cpp

#include 
#include "person.h"
#include "dog.h"

int main(int argc, char **argv)
{
	A::Person per;
	per.setName("zhangsan");
	per.setAge(16);
	per.printInfo();

	C::Dog dog;
	dog.setName("wangcai");
	dog.setAge(1);
	dog.printInfo();

	A::printVersion();
	C::printVersion();
	return 0;
}

person.h

#include 

namespace A {//由于打印了两个完全一样的printVersion,需要区分开来。

class Person {
private:
	char *name;
	int age;
	char *work;

public:
	void setName(char *name);
	int setAge(int age);
	void printInfo(void);
};

void printVersion(void);
}


person.cpp


#include 
#include "person.h"

namespace A {

void Person::setName(char *name)
{
	this->name = name;
}

int Person::setAge(int age)
{
	if (age < 0 || age > 150)
	{
		this->age = 0;
		return -1;
	}
	this->age = age;
	return 0;
}

void Person::printInfo(void)
{
	printf("name = %s, age = %d, work = %sn", name, age, work); 
}

void printVersion(void)
{
	printf("Person v1, by weidongshann");
}

}


dog.h

namespace C {

class Dog {
private:
	char *name;
	int age;
public:
	void setName(char *name);
	int setAge(int age);
	void printInfo(void);
};

void printVersion(void);

}


dog.cpp

#include 
#include "dog.h"

namespace C {

void Dog::setName(char *name)
{
	this->name = name;
}

int Dog::setAge(int age)
{
	if (age < 0 || age > 20)
	{
		this->age = 0;
		return -1;
	}
	this->age = age;
	return 0;
}

void Dog::printInfo(void)
{
	printf("name = %s, age = %dn", name, age); 
}

void printVersion(void)
{
	printf("Dog v1, by weidongshann");
}

}


Makefile

person: main.o person.o dog.o
	g++ -o $@ $^

%.o : %.cpp
	g++ -c -o $@ $<

clean:
	rm -f *.o person	

你看到的A:: C:: 这些会不会太麻烦了。做一些小修改:
main.c

#include 
#include "person.h"
#include "dog.h"




using A::Person;


using C::Dog;


int main(int argc, char **argv)
{
	
	//using A::Person;
	//using C::Dog;

	Person per;
	per.setName("zhangsan");
	per.setAge(16);
	per.printInfo();

	Dog dog;
	dog.setName("wangcai");
	dog.setAge(1);
	dog.printInfo();

	A::printVersion();
	C::printVersion();
	return 0;
}


再来改进一下:

#include 
#include "person.h"
#include "dog.h"

using namespace A;//他把A空间的东西都导出来
using namespace C;//他把C空间的东西都导出来

int main(int argc, char **argv)
{
	
	//using A::Person;
	//using C::Dog;

	Person per;
	per.setName("zhangsan");
	per.setAge(16);
	per.printInfo();

	Dog dog;
	dog.setName("wangcai");
	dog.setAge(1);
	dog.printInfo();

	A::printVersion();//导出来以后会冲突啊,所以这一句加上A::printVersion();
	C::printVersion();//导出来以后会冲突啊,所以这一句加上C::printVersion();
	return 0;
}


最后的修改如下:

main.cpp

#include 
#include "person.h"
#include "dog.h"

using namespace A;
using namespace C;

int main(int argc, char **argv)
{
	
	//using A::Person;
	//using C::Dog;

	Person per;
	per.setName("zhangsan");
	per.setAge(16);
	per.printInfo();

	Dog dog;
	dog.setName("wangcai");
	dog.setAge(1);
	dog.printInfo();

	A::printVersion();
	C::printVersion();
	return 0;
}


person.h

#include 

namespace A {

class Person {
private:
	char *name;
	int age;
	char *work;

public:
	void setName(char *name);
	int setAge(int age);
	void printInfo(void);
};

void printVersion(void);
}

person.cpp

#include 
#include "person.h"

namespace A {

void Person::setName(char *name)
{
	this->name = name;
}

int Person::setAge(int age)
{
	if (age < 0 || age > 150)
	{
		this->age = 0;
		return -1;
	}
	this->age = age;
	return 0;
}

void Person::printInfo(void)
{
	std::cout<<"name = "< 

dog.cpp

#include 
#include "dog.h"

namespace C {

using namespace std;

void Dog::setName(char *name)
{
	this->name = name;
}

int Dog::setAge(int age)
{
	if (age < 0 || age > 20)
	{
		this->age = 0;
		return -1;
	}
	this->age = age;
	return 0;
}

void Dog::printInfo(void)
{
	cout<<"name = "< 

dog.h

namespace C {

class Dog {
private:
	char *name;
	int age;
public:
	void setName(char *name);
	int setAge(int age);
	void printInfo(void);
};

void printVersion(void);

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982516.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号