[C ++] - classes e objetos, esse ponteiro

Um, oop orientado a objetos

Em c, temos várias definições de funções. Mas em C ++, somos o tipo abstrato de entidade. A figura a seguir descreve o relacionamento entre suas idéias oop.
Insira a descrição da imagem aqui
Quatro características da linguagem OOP: polimorfismo de herança de encapsulamento abstrato (oculto)

Segundo, classes e objetos

Vamos descrever uma classe de mercadoria para especificar uma classe e um objeto.Primeiro
: defina uma classe de mercadoria, que é equivalente a uma estrutura na linguagem c.

1. Definição de classe

const int NAME_LEN = 20;
class CGoods
{
public:
	void init(const char* name, double price, int amount);//做商品数据初始化
	void show();//打印商品信息
	void setName(char* name) { strcpy(_name, name); }
	void setPrice(double price) { _price = price ;}
	void setAmount(int amount) { _amount = amount ;}

	const char* getName() {return _name;}
	double getPrice() { return _price ;}
	int getAmount() { return _amount; }
private:
	char _name[NAME_LEN];
	double _price;
	int _amount;
};

Na classe acima, podemos entender
(1) private : atributos (variáveis ​​de membro) são geralmente privadas

(2) public : O método membro fornece um método comum para o exterior para acessar propriedades privadas **. Os métodos implementados na classe são processados ​​automaticamente em funções embutidas **

(3) setXXX e getXXX : defina uma interface para acessar variáveis ​​de membros individualmente ou obter o valor de variáveis ​​de membros e forneça um conjunto de métodos getXXX ou setXXX para variáveis ​​de membros

(4) classe : tipo de dado abstrato de mercadoria, sem espaço ocupado CGoods pode definir inúmeros objetos, cada objeto tem sua própria variável de membro, mas eles compartilham um conjunto de métodos de membro.O tamanho da memória do objeto e da variável de membro
pode ser passado. Use apenas o comando cmd no VS para exibir o tamanho da memória do objeto.Insira a descrição da imagem aqui

2. Definição fora da classe

Os métodos definidos fora da classe devem ter um escopo definido antes do nome da função, que é uma função comum.Se você deseja se tornar uma função embutida, deve adicionar explicitamente

void CGoods::init(const char* name, double price, int amount)
{
	strcpy(_name, name);
	_price = price;
	_amount = amount;
}
void CGoods::show()
{
	cout << "name:" << _name << endl;
	cout << "price:" << _price << endl;
	cout << "amount:" << _amount << endl;
}

3. Classe de instanciação da função principal

int main()
{
	CGoods good1;//类实例化了一个对象,对象占用空间,在栈上
	good1.init("面包", 10.0, 200);
	good1.show();
	good1.setPrice(20.5);
	good1.setAmount(100);
	good1.show();

	CGoods good2;
	good2.init("空调", 10000.0, 50);
	good2.show();

	return 0;
}

O resultado da execução é:
Insira a descrição da imagem aqui

Três, esse ponteiro

Função: Distinguir diferentes objetos no
método.Vamos pensar em um problema desse tipo:
(1) Como o init (nome, preço, quantidade) sabe em qual objeto inicializar as informações?
good1.init ("bread", 10.0, 200); na verdade, good1.init (& good1, "bread", 10.0, 200); o método de objeto da classe na qual o endereço do objeto é passado
é compilado, todos os parâmetros de método, Adicionará um ponteiro this para receber o endereço do objeto que chama o método

(2) Por que um conjunto de métodos pode lidar com vários objetos?
Porque quando um objeto chama um método, ele passa o endereço do objeto para sua função através de parâmetros reais, e essas funções usarão o ponteiro tils gerado no tempo de compilação para aceitar o endereço do objeto recebido.

A seguir está o método de chamada desse ponteiro

void CGoods::init(const char* name, double price, int amount)
{
	strcpy(_name, name);
	this->_price = price;
	this->_amount = amount;
}
void CGoods::show()
{
	cout << "name:" << this->_name << endl;
	cout << "price:" << this->_price << endl;
	cout << "amount:" << this->_amount << endl;
}
Publicado 98 artigos originais · ganhou elogios 9 · vista 3674

Acho que você gosta

Origin blog.csdn.net/qq_43412060/article/details/105060327
Recomendado
Clasificación