Seu programa tem apenas um problema. Falta de atenção.
Por exemplo, ele tem o seguinte bug:
cout << "sexo: " << peso << endl;
cout << "Peso: " << altura << endl;
cout << "Altura: " << sexo << endl;
Que confusão é essa aí que você fez?
De qualquer maneira, dei uma ajeitada . Tire fora as coisas que estou imprimindo a mais e pus só para poder ver por que é que seu programa não estava rodando.
#include<iostream> //biblioteca
#include <string>
using namespace std;
class Pessoa {
private:
string nome;
double peso,altura; //variável
char sexo;
public:
Pessoa(){ //cria o construtor objeto
}
virtual bool setPeso (double valor) {
if (peso >= 0.0 && peso < 200.0) {
peso = valor;
return true;
} else {
return false;
}
}
virtual double getPeso() {
return peso;
}
virtual bool setaltura (double valor) {
cout << "altura = " << valor << endl;
if (valor >= 0.50 && valor < 240.0) {
altura = valor;
cout << "Dentro" << endl;
return true;
}else {
cout << "Fora" << endl;
return false;
}
}
virtual double getaltura() {
return altura;
}
bool setsexo (char valor) {
if (valor == 'M' || valor == 'F'){
sexo = valor;
return true;
} else {
return false;
}
}
virtual char setsexo() {
return sexo;
}
void setNome(string n){ //recebe o valor do int main
nome = n;
}
string getNome(){
return nome;
}
void print(){ //mostra o valor na tela
cout << "-------------\n";
cout << "Nome: " << nome.c_str() << endl;
cout << "sexo: " << sexo << endl;
cout << "Peso: " << peso << endl;
cout << "Altura: " << altura << endl;
}
};
int main(){
Pessoa p; // chama o construtor-padrão
double peso,altura;
string nome;
char sexo;
cout << "Digite o nome: ";
getline(cin, nome);
cout << "Digite o peso: ";
cin >> peso;
cout << peso << endl;
cout<< "Digite a altura: ";
cin >> altura;
cout << altura << endl;
cout << "Digite o sexo: ";
cin >> sexo;
cout << sexo << endl;
p.setNome(nome);
if (!p.setPeso(peso)) {
cerr << "Peso fora dos limites" << endl;
}
if (!p.setaltura(altura)) {
cerr << "Altura fora dos limites" << endl;
}
if (!p.setsexo(sexo)) {
cerr << "Sexo fora dos limites" << endl;
}
//envia o valor para void setNome
p.print(); //enviar o resultado para void print()
} //fim